如何使用jQuery选择具有非字母数字id的元素?

时间:2012-08-07 12:44:27

标签: jquery

Axl Rose的wiki页面包含一个id为

的元素
1983.E2.80.931986:_Early_years

我使用$('#1983.E2.80.931986:_Early_years')来获取此元素,但失败了。

如果我想通过ID选择此元素,那么正确的选择器是什么?

6 个答案:

答案 0 :(得分:17)

直接来自the docs

  

如果您想使用任何元字符(例如   !"#$%&'()*+,./:;<=>?@[\]^&a{|}~)作为名字的字面部分,你必须   用两个反斜杠转义角色:\\.例如,如果你   拥有id="foo.bar"的元素,您可以使用选择器$("#foo\\.bar")

推论:

jQuery.escapeSelector = function(str) {
  return str.replace(/[!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~]/g, "\\$&");
}

// ...

$('#' + $.escapeSelector('1983.E2.80.931986:_Early_years'))

答案 1 :(得分:3)

由于存在这些类型的字符,我个人发现最简单,最易读的方法是按ID搜索,例如:

$('[id*="1983.E2.80.931986:_Early_years"]')​​​​​​​ // will search for the ID anywhere

比逃避角色等更简单,更容易混淆。特别是,因为如果你以某种方式更改了ID名称,你就不必担心它的命名。

如果您从后端代码中动态构建此ID ,这是最有意义的,它将始终正确地准备并运行。

http://jsfiddle.net/Yt8D9/

答案 2 :(得分:3)

你可以使用javascript

的document.getElementById( '1983.E2.80.931986:_Early_years')

答案 3 :(得分:1)

转义:.

$('#1983\\.E2\\.80.931986\\:_Early_years')

答案 4 :(得分:1)

会中断选择,因为它是由css伪类保留的(例如:hover)。尝试反斜杠

答案 5 :(得分:1)

Escape it使用'\\':

$('#1983\\.E2\\.80\\.931986\\:_Early_years')