我尝试使用 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')");
关于javascript - 如何转义 jQuery 的 :contains selector? 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717345/