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

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

1983.E2.80.931986:_Early_years 

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

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

直接来自文档 :

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

推论:

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

你可以使用javascript

的document.getElementById( ‘1983.E2.80.931986:_Early_years’)

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

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

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

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

http://jsfiddle.net/Yt8D9/

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

逃避:.

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

使用’\\’ 转义它 :

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