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

Rik*_*ard 4 javascript jquery

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

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

HTML

<div name="name[1]"></div>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$('div[name=name[1]]'); //wrong
$('div[name="name[1]"]'); //correct?
$('div[name="name\\[1\\]"]'); //correct?
$('div[name=name\\[1\\]]'); //correct?
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Ser*_*gio 7

除了第一个错误的情况:$('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中第一个反斜杠\转义第二个结果\[,这是相同的[.所以这个例子和前面的例子一样带有不必要的反斜杠.

  • $('div[name=name\\[1\\]]') 没问题,内部[]被转义,因此它们不会被混淆为CSS/jQuery选择器.

从jQuery文档:

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



在这里演示

好读: