我有以下声明:
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
等。
答案 0 :(得分:2)
^=
运算符匹配属性开头的文本,但它不会检查其余的是否为有效数字(重要吗?)。从理论上讲:
if ($(this).find("option[text^='My Cool Option']").is(":selected"))
但是! text
上没有option
属性,因此这个和原始代码都不起作用。它只是起作用,因为jQuery如何获取属性值(获取text
属性而不是text
属性),这是试图解决一些不同的浏览器错误。这肯定会在将来中断(如果没有别的,当在浏览器中实现Selectors-API Level 2时,jQuery使用它优先于它自己的代码)。
您可以尝试使用特定于jQuery的非标准contains
选择器:
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) ...
(通常最好检查选项值而不是文本字符串。)
答案 1 :(得分:0)
有一些插件可以扩展JQuery的正则表达式功能,例如this one from James Padolsey。
请记住,此方法可能很慢,因此请谨慎使用,并且仅限于有限的元素集。