在jQuery选择器中转义方括号的这些不同方法之间有什么区别

在jQuery选择器中转义方括号的这些不同方法之间有什么区别

有正确或错误的方式还是这些都是正确的? 我已经阅读了不同的答案(包括这个但没有比较这种不同的方式

HTML

jQuery的

 $('div[name=name[1]]'); //wrong $('div[name="name[1]"]'); //correct? $('div[name="name\\[1\\]"]'); //correct? $('div[name=name\\[1\\]]'); //correct? 

我问的所有人都correct? 工作,是使用选择器的ok方式/语法?

编辑:

在实际发布之前阅读了重复的建议答案并没有解释差异或应该使用哪些……我现在从这个答案中得到了答案。

除了第一个错误的案例: $('div[name=name[1]]'); 抛出一个错误unrecognized expression: div[name=name[1]] – 所有其他都可以使用,因为原因略有不同。

说明:

  • $('div[name="name[1]"]')可以使用,因为jQuery将name[1]视为字符串而不是CSS / jQuery选择器。 所以没必要逃避它。

  • $('div[name="name\\[1\\]"]')实际上是不必要的转义,但有效 。 jQuery将name\\[1\\]作为字符串读取,并在javascript中第一个反斜杠\ escape第二个结果\[ ,这与[ 。]相同。 所以这个例子与之前的不必要的反斜杠相同。

  • $('div[name=name\\[1\\]]') ,内部[]按原样进行转义,因此它们不会被混淆为CSS / jQuery选择器。

从jQuery文档:

要使用任何元字符(例如!“#$%&’()* +,。/:; <=>?@ [] ^`{|}〜)作为名称的文字部分,必须使用两个反斜杠进行转义:\\。


在这里演示

好读:

  • MDN – 转义字符
  • jQuery – 选择器
  • W3.org – 角色

尝试这样的事情

  var div = document.getElementsByName('name[1]')[0]; //now use your own way $(div).text();