我很难使用包含brakcets的jquery选择器。 基本上我在我的jquery代码中解析来自服务器的JSON响应。然后,一旦解析完成,我就遍历对象。
这个对象有这样的结构:
errors = {
input#title_id: "error message",
select#authors_id[]: "error message 2"
}
然后我迭代这个地图,如下:
$.each(errors, function(fieldSelector,errMsg){
fieldSelector = fieldSelector.replace('[','\\\\[');
fieldSelector = fieldSelector.replace(']','\\\\]');
$(fieldSelector).hide(); //for the example
}
除了带括号的id的选择外,一切都很好用。
答案 0 :(得分:0)
根据jQuery Selector documentation,您需要使用两个括号来转义元字符:
如果您想使用任何元字符(例如
!"#$%&'()*+,./:;<=>?@[\]^{|}~
)作为名称的字面部分, 你必须用两个反斜杠来转义角色:\\
。 例如,如果您有一个id="foo.bar"
的元素,则可以 使用选择器$("#foo\\.bar")
。
但是只需要双括号,以便选择器字符串中存在单个括号char \
。然后,选择器引擎将使用该括号来转义元字符。无论如何,这意味着您的代码也只需要使用两个括号 - 不需要提供额外的转义级别:
$.each(errors, function(fieldSelector,errMsg){
fieldSelector = fieldSelector.replace('[','\\[');
fieldSelector = fieldSelector.replace(']','\\]');
$(fieldSelector).hide(); //for the example
});
答案 1 :(得分:0)
答案稍微容易一些 - 您可以使用没有特殊语法的gEBI,而不是Sizzle。
$.each(errors, function(fieldSelector,errMsg){
$(document.getElementById(fieldSelector)).hide(); //for the example
}