Как использовать регулярные выражения в функции поиска в JQuery - PullRequest
0 голосов
/ 06 февраля 2010

У меня есть следующее утверждение:

if ($(this).find("option[text='My Cool Option1']").is(":selected"))
  //do something

В основном у меня есть комбинированный список с множеством опций. Я хочу сделать что-то для опций, которые начинаются с My Cool Option<any number>

код выше работает только для одной опции My Cool Option1 ... но как мне заставить его работать, скажем, My Cool Option2 ..3..4 и т. Д.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2010

Оператор ^= сопоставляет текст в начале атрибута, но он не будет проверять, является ли остаток действительным числом как таковым (это важно?). Теоретически:

if ($(this).find("option[text^='My Cool Option']").is(":selected"))

Однако! Нет атрибута text в option, поэтому и этот, и ваш исходный код не должны работать. Это работает только из-за того, что jQuery выбирает значения атрибута (выбирая свойство text вместо атрибута text), который пытается обойти некоторые ошибки браузера. Это определенно сломается в будущем (если вообще ничего, когда Selectors-API Level 2 реализован в браузерах и jQuery использует это в предпочтении по отношению к своему собственному коду).

Вы можете попробовать нестандартный селектор contains, специфичный для jQuery:

if ($(this).find('option:contains("My Cool Option")').is(":selected"))

но это может соответствовать этой строке в другом месте текста, если это имеет значение.

Если у вас не множественное поле выбора (т. Е. Может быть выбран только один вариант), вы можете получить один выбранный параметр text() и проверить его:

if ($(this).find('option:selected').text().match(/^My Cool Option\d+$/))

в противном случае вам придется перебирать опции, ища совпадение:

var cool= false;
for (var i= this.options.length; i-->0;) {
    var option= this.options[i];
    if (option.selected && option.text.match(/^My Cool Option\d+$/)) {
        cool= true;
    }
}
if (cool) ...

(Обычно лучше проверять значения параметров, а не текстовые строки.)

0 голосов
/ 06 февраля 2010

Существуют плагины, расширяющие возможности регулярных выражений JQuery, такие как от Джеймса Падолси .

Имейте в виду, что этот метод может быть медленным, поэтому используйте его с осторожностью и только на ограниченных наборах элементов.

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