jquery选择器不使用括号

时间:2012-03-30 19:28:16

标签: json jquery

我很难使用包含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的选择外,一切都很好用。

2 个答案:

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