jQuery选择器如果包含.
,则无法选择ID
在我的应用程序ID名称中,从用户名动态生成。
如何从标记ID 中转义任何特殊字符,以便jQuery选择器运行良好?
例如,ID1:This.Is.ID.1
ID2:This.is.Another.ID
任何人都可以帮助我。
提前致谢。
答案 0 :(得分:14)
如果我理解正确,你想修改一个包含句点的字符串,在每个句点前面都有\\,作为jQuery选择器中的id支持。以下是如何做到这一点:
var username = 'some.username.with.dots';
// Replace all periods with \\. to
username = username.replace(/\./g, '\\\\.');
// find element that matches #some\\.username\\.with\\.dots
$('#' + username).doSomethingWithjQuery();
.
表示正则表达式中的“任何字符”,因此您需要将\
放在前面来逃避它。g
正则表达式修饰符意味着贪婪,没有它,替换表达式只会将第一个.
替换为\\.
修改强>
我尝试了我的代码,似乎您需要将替换值更改为\\\\.
以使其成为\\.
答案 1 :(得分:9)
官方jQuery常见问题解答有一个确切的问题: How do I select an element by an ID that has characters used in CSS notation? 他们甚至可以帮助您逃脱。引用它:
...冒号(“
:
”)和句点(“.
”)在jQuery选择器的上下文中是有问题的,因为它们分别表示伪类和类。 / p>为了告诉jQuery按字面意思处理这些字符而不是CSS符号,必须通过在它们前面放置两个反斜杠来“转义”它们。
// Does not work:
$( "#some:id" )
// Works!
$( "#some\\:id" )
// Does not work:
$( "#some.id" )
// Works!
$( "#some\\.id" )
以下函数负责转义这些字符,并在ID字符串的开头放置一个“#”:
function jq( myid ) {
return "#" + myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}
该功能可以这样使用:
$( jq( "some.id" ) )
答案 2 :(得分:1)
答案 3 :(得分:0)
您实际上并不需要从ID远程执行。您只需要转义选择器中的任何特殊字符。例如,要选择以下元素:
<div id='foo.bar'></div>
......你可以使用:
$('#foo\\.bar');
答案 4 :(得分:0)
the jQuery documentation表示使用两个反斜杠来转义它们。
因此,您的示例将使用$("#This\\.Is\\.ID\\.1")