Оператор ^=
сопоставляет текст в начале атрибута, но он не будет проверять, является ли остаток действительным числом как таковым (это важно?). Теоретически:
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) ...
(Обычно лучше проверять значения параметров, а не текстовые строки.)