javascript - 如何转义 jQuery 的 :contains selector? 中的括号

标签 javascript jquery

我尝试使用 jQuery 在表中搜索用户代理字符串。如果我这样搜索,找不到:

jQuery("table.make-html-table
td:contains('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')")
.css("background","yellow");

如果我这样搜索 - 在\( 之前加斜线 - 那么它会给我一个错误:

jQuery("table.make-html-table
td:contains('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')")
.css("background","yellow");

错误:

"Syntax error, unrecognized expression: (comp...

如何正确地转义该字符串,以便我可以使用 jQuery 搜索包含它的单元格?

最佳答案

sizzle中的相关部分是

PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/

这让我觉得没有办法。看起来它只接受根本不包含括号的参数,或者只接受其中一个级别的参数,如 :contains("(foo)")。如果引用一个参数,一个明显的改进是接受任何东西,希望这能尽快解决。

目前,解决方法是编写一个接受转义参数的选择器,例如:

$.extend($.expr[':'], {
    containsEscaped: function (el, index, m) {  
        var s = unescape(m[3]);
        return $(el).text().indexOf(s) >= 0;
    }  
});      

用法:

var p = $("p:containsEscaped('foo%28bar')");

在行动中:http://jsfiddle.net/9wWP5/

关于javascript - 如何转义 jQuery 的 :contains selector? 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717345/

相关文章:

javascript - 执行模拟 DOM 事件的浏览器默认操作

javascript - .removeClass() jQuery 立即添加删除的类

javascript - 单击按钮后停止页面回发

jquery - 当 if 语句正确时显示一个新的 <p> 元素

javascript - 在具有相同类的多个 div 上启动 ProgressBar

javascript - click() 的 jQuery 回调不起作用

javascript - 与特定地址匹配的对象值求和

asp.net - 用于 ASP.NET 的 jQuery 图表控件

javascript - 获取可见选择选项的数量

javascript - 将点击事件绑定(bind)到点击