如何在jquery中的find函数中使用regex

时间:2010-02-06 00:18:07

标签: jquery regex

我有以下声明:

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 个答案:

答案 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

请记住,此方法可能很慢,因此请谨慎使用,并且仅限于有限的元素集。