9

Axl Rose 的 wiki 页面包含一个带有 id 的元素:

1983.E2.80.931986:_Early_years

$('#1983.E2.80.931986:_Early_years')用来获取这个元素但失败了。

如果我想通过 id 选择这个元素,正确的选择器是什么?

4

6 回答 6

17

直接来自文档

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

推论:

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

// ...

$('#' + $.escapeSelector('1983.E2.80.931986:_Early_years'))
于 2012-08-07T12:46:49.180 回答
3

由于有这些类型的字符,我个人发现最简单和最易读的方法是通过 ID 本身进行搜索,例如:

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

比必须转义字符等更容易且更少混乱的方式。特别是因为如果您以某种方式更改 ID 名称,您不必担心它的命名。

如果您从后端代码动态构建此 ID,这是最有意义的,它将始终正确预置并工作。

http://jsfiddle.net/Yt8D9/

于 2012-08-07T12:47:53.593 回答
3

你可以为此使用javascript

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

于 2012-08-07T12:48:51.053 回答
1

逃避:.

$('#1983\\.E2\\.80.931986\\:_Early_years')
于 2012-08-07T12:46:29.270 回答
1

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

于 2012-08-07T12:47:00.797 回答
1

使用 '\\'转义它:

$('#1983\\.E2\\.80\\.931986\\:_Early_years')
于 2012-08-07T12:49:34.170 回答