如何使用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,这将是最有意义的,它将始终正确地准备并工作。
:破坏选择,因为它是由css伪类保留的(例如:hover)。 尝试反斜杠:
逃避:
和.
$('#1983\\.E2\\.80.931986\\:_Early_years')
使用’\\’ 转义它 :
$('#1983\\.E2\\.80\\.931986\\:_Early_years')