我尝试使用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搜索包含它的单元格?
答案 0 :(得分:4)
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')");
答案 1 :(得分:2)
使用两个斜杠:
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'):contains('compatible; MSIE 6.0; Windows NT 5.1')").css('background-color','yellow');
使用textEquals自定义选择器的另一种解决方案
jQuery.expr[':'].textEquals = function(a, i, m) {
return jQuery(a).text() === m[3];
};
...
jQuery("table.make-html-table td:textEquals('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')")
.css("background","yellow");