4

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

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

HTML

<div name="name[1]"></div>

jQuery

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

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

编辑 :

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

4

2 回答 2

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 文档:

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



演示在这里

好读:

于 2013-09-02T12:22:28.900 回答
0

尝试这样的事情

        var div = document.getElementsByName('name[1]')[0];
        //now use your own way
        $(div).text();
于 2013-09-02T12:30:48.200 回答