在JavaScript中转义点

Par*_*ars 7 javascript jquery escaping

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

如何从标记ID中转义任何特殊字符,以便jQuery选择器运行良好?

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

谁能帮我.

提前致谢.

Jes*_*röm 15

如果我理解正确,你想修改一个包含句点的字符串,在每个句点前面都有\\,作为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();
Run Code Online (Sandbox Code Playgroud)
  • .在正则表达式中表示"任何字符",因此您需要通过放在\前面来逃避它.
  • g正则表达式修饰符意味着贪心,没有它的替换表达式将仅替换所述第一.\\.

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

JS控制台


acd*_*ior 10

官方jQuery常见问题解答有一个确切的问题:如何通过具有CSS表示法中使用的字符的ID选择元素?它们甚至可以帮助您逃脱.引用它:

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

为了告诉jQuery按字面意思处理这些字符而不是CSS符号,它们必须通过在它们前面放置两个反斜杠来"转义".

// Does not work:
$( "#some:id" )

// Works!
$( "#some\\:id" )

// Does not work:
$( "#some.id" )

// Works!
$( "#some\\.id" )
Run Code Online (Sandbox Code Playgroud)

以下函数负责转义这些字符,并在ID字符串的开头放置一个"#":

function jq( myid ) {
    return "#" + myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}
Run Code Online (Sandbox Code Playgroud)

该功能可以像这样使用:

$( jq( "some.id" ) )
Run Code Online (Sandbox Code Playgroud)