在JavaScript中转义点
如果jQuery选择器包含a,则它无法选择ID .
在里面。
在我的应用程序ID名称中从用户名动态生成。
如何从标记ID中转义任何特殊字符,以便jQuery选择器运行良好?
例如,ID1: This.Is.ID.1
ID2: This.is.Another.ID
谁能帮我。
提前致谢。
如果我理解正确,你想要修改一个包含句点的字符串,在每个句点前面都有\\,作为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();
-
.
在正则表达式中表示“任何字符”,因此您需要通过将\
in放在前面来逃避它。 -
g
正则表达式修饰符意味着贪婪,没有它,替换表达式只会替换第一个.
用\\.
编辑我尝试了我的代码,似乎你需要将替换值更改为\\\\.
使它成为\\.
官方jQuery常见问题解答有一个确切的问题: 如何通过具有CSS表示法中使用的字符的ID选择元素? 它们甚至可以帮助您逃脱。 引用它:
…冒号(“
:
”)和句点(“.
”)在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" ); }
该function可以这样使用:
$( jq( "some.id" ) )
使用\\
(双反斜杠)来转义特殊字符。
$('#this\\.something')
小提琴
你实际上并不需要从id远程调用。 您只需要转义选择器中的任何特殊字符。 例如,要选择以下元素:
… 您可以使用:
$('#foo\\.bar');
jQuery文档声明两个反斜杠用于转义它们。
所以你的例子会使用$("#This\\.Is\\.ID\\.1")