【问题标题】:What is the difference between these different ways to escape square brackets inside jQuery selectors这些在jQuery选择器中转义方括号的不同方法有什么区别
【发布时间】:2013-09-02 12:22:09
【问题描述】:

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

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

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? 的所有人都工作,使用选择器的方式/语法可以吗?

编辑:

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

【问题讨论】:

  • 是的,只是第一个不起作用
  • 我不确定它是否良好的实践/正确的语法
  • 最简单最易读的就是最好的。
  • @ÁlvaroG.Vicario,我在实际发布之前阅读了该答案,它没有解释差异或应该使用哪个......
  • 不是重复的,因为其他答案没有涵盖 OP 所指的差异。

标签: javascript jquery


【解决方案1】:

除了第一个错误的情况:$('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\\]]') is ok 和内部 [] 被转义,因此它们不会被混淆为 CSS/jQuery 选择器。

来自 jQuery 文档:

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



演示here

好读:

【讨论】:

    【解决方案2】:

    试试这样的

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

    【讨论】:

    • 如果有多个同名元素,则不一样。
    • 为什么要回答一个关于 jQuery 选择器的问题并使用 vanilla js 来回答?
    • @dystroy , getElementsByName 给你数组,所以你可以迭代,在代码中我只取了第一个元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2018-04-29
    • 2018-12-17
    • 2012-01-14
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多