在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();