Установить атрибут отключен для параметров, не содержащих определенную строку - PullRequest
0 голосов
/ 12 мая 2010

Я знаю, это должно быть проще, если бы я мог использовать только optgroups. Но я пытаюсь избежать взлома ядра моей CMS, поэтому, надеюсь, jQuery снова придет на помощь.

У меня иногда есть выбор с параметрами в иерархии, и я хочу отключить атрибуты для любого из параметров, содержащих текст, НЕ начинающийся с тире. Я хочу кодировать как:

Установить отключенные атрибуты для селекторов с текстом опций, НЕ начинающимся с тире ("-").

<select id="options">
<option value="" selected="selected">- Please choose -</option>
<option value="1">Parent1</option>
<option value="2">-child1</option>
<option value="3">-child2</option>
<option value="4">-child3</option>
<option value="5">-child4</option>
<option value="6">Parent2</option>
<option value="7">-child5</option>
<option value="8">-child6</option>
<option value="9">-child7</option>
<option value="10">-child8</option>
</select>

Здесь самое близкое решение : содержать / начинать с ,

$.extend($.expr[':'], {
    startsWith: function(elem,match) {  
        return (elem.textContent || elem.innerText || "").indexOf(match[3]) == 0;
    }  
});

Но я не могу сделать это прямо сейчас.

Любая помощь будет принята с благодарностью. Большое спасибо.

1 Ответ

1 голос
/ 12 мая 2010

Вы можете использовать .filter(), например:

​$("#options option").filter(function() {
    return $(this).text().indexOf("-") !== 0;
}​).attr('disabled', true);​​

Это отфильтровывает любые элементы, у которых нет текста, начинающегося с "-", , вы можете увидеть демо здесь .

Подход к пользовательскому селектору, как и ваш вопрос, будет таким:

$.extend($.expr[':'], {
    startsWith: function(a, b, match) {
        return $(a).text().indexOf(match[3]) === 0;
    }  
});

$("#options option:not(:startsWith(-))").attr('disabled', true);​

Демонстрацию этого метода можно посмотреть здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...