9

如果 ID 中包含 a,则 jQuery 选择器无法选择.它。
在我的应用程序 ID 名称中从用户名动态生成。

如何从标签 ID 中转义任何特殊字符,以便 jQuery 选择器正常工作?

例如,ID1:This.Is.ID.1 ID2:This.is.Another.ID

谁能帮我。

提前致谢。

4

5 回答 5

16

如果我理解正确,您想修改一个包含句点的字符串,使其在每个句点前面都有 \\,以便在 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则表达式修饰符意味着贪婪,没有它替换表达式只会替换第.一个\\.

编辑 我尝试了我的代码,看来您需要更改替换值以\\\\.使其成为\\.

JS 控制台

于 2013-10-25T18:11:08.257 回答
12

官方的 jQuery FAQ 有这个确切的问题:如何通过 ID 选择一个元素,该 ID 具有用于 CSS 表示法中的字符?它们甚至具有帮助您逃脱的功能。引用它:

...冒号 (" :") 和句点 (" .") 在 jQuery 选择器的上下文中是有问题的,因为它们分别表示伪类和类。

为了告诉 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" ) )
于 2013-10-25T18:21:30.640 回答
1

使用\\(双反斜杠)转义特殊字符。

$('#this\\.something')

小提琴

于 2013-10-25T18:15:59.057 回答
0

jQuery 文档声明使用两个反斜杠来转义它们。

所以你的例子会使用$("#This\\.Is\\.ID\\.1")

于 2013-10-25T18:14:43.207 回答
-1

您实际上不需要将 . 从 id 远程。您只需要转义选择器中的任何特殊字符。例如,要选择以下元素:

<div id='foo.bar'></div>

... 您可以使用:

$('#foo\\.bar');
于 2013-10-25T18:12:55.573 回答