2013-10-25 25 views
4

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

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

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

谁能帮我。

在此先感谢。

+1

正则表达式转义是一个单独的\ –

+1

你能写出正则表达式的全行代码吗? – Pars

+2

究竟是什么情况,你需要这个?首先你谈论jQuery选择器,但是然后你会问如何在正则表达式中转义点。 – JJJ

回答

12

如果我正确地理解了你,你想修改一个字符串,它包含句点在每个句点前都有\\,作为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 Console

+0

谢谢。正确的答案 – Pars

+1

我不确定是否将一条丑陋的代码划分为三条丑陋的代码段会更好或更糟,也许最好是编写一个隐藏这个丑陋代码的小型jQuery扩展代码。 。用户名.with.dots','。')'... – STW

+0

我只是想逃避''',你的代码对我来说工作的非常好,谢谢 – Pars

0

你实际上并不需要ŧ远离ID的。。您只需要转义选择器中的任何特殊字符。例如,选择下列元素:

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

...您可以使用:

$('#foo\\.bar'); 
0

the jQuery documentation指出两个反斜杠被用来逃避它们。

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

+0

“期间不应该用于类或ID” 。我想这可能不是可取的,但它是完全有效的HTML。 – jmar777

+0

你是对的,先生:http://www.w3.org/TR/html4/types.html#type-id - 我会twea k我的答案。 – STW

+0

你有一个HTML4链接。这里是HTML5 ['id' link](http://www.w3.org/html/wg/drafts/html/master/dom.html#the-id-attribute)和['class' link](http ://www.w3.org/html/wg/drafts/html/master/dom.html#classes)定义了[“空格分隔标记”](http://www.w3.org/html/wg/class /链接引用的/drafts/html/master/infrastructure.html#set-of-space-separated-tokens)。 – ajp15243

1

使用\\(双反斜线)逃跑的特殊字符。

$('#this\\.something') 

Fiddle

7

官方jQuery的常见问题有确切的问题:How do I select an element by an ID that has characters used in CSS notation?他们甚至有一个功能来帮助你逃脱。引用它:

...冒号(“:‘)和周期(’.”)分别是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"))