用jQuery处理元素ID中的冒号

我们无法使用jQuery在JS代码中访问ID为“test:abc”的div元素。

<div id="test:abc"> $('#test:abc') 

它没有冒号工作正常。 我们没有对ID生成的控制,因为它是在Trinidad子表单中自动生成的,因为它将子表单ID与:附加到其中的每个元素。

您需要使用两个反斜杠来避开冒号:

 $('#test\\:abc') 

简而言之

$(document.getElementById("test:abc"))是你应该使用的。

说明 :除了速度增益(见下文)之外,更容易处理。

例如:说你有一个function

  function doStuff(id){ var jEle = $("#" + id); //is not safe, since id might be "foo:bar:baz" and thus fail. //You would first have to look for ":" in the id string, then replace it var jEle = $(document.getElementById(id)); //forget about the fact //that the id string might contain ':', this always works } //just to give an idea that the ID might be coming from somewhere unkown var retrievedId = $("foo").attr("data-target-id"); doStuff(retrievedId); 

速度/时间

看看这个jsbin,它testing和比较ID和冒号的select方法的速度

你需要打开你的萤火虫控制台才能得到结果。

我用firefox 10和jquery 1.7.2testing了它

基本上我做了一个select10'000次的div与冒号在id – 用不同的方法来实现它。 然后我把结果与没有冒号的IDselect进行比较,结果相当令人惊讶。

剩余时间以毫秒右select器方式

 299 $("#annoying\\:colon") 302 $("[id='annoying:colon']" 20 $(document.getElementById("annoying:colon")) 71 $("#nocolon") 294 $("[id='nocolon']") 

特别

  71 $("#nocolon") and 299 $("#annoying\\:colon") 

有点惊喜

显然,它正在冒号,因为jQuery试图把它解释为一个select器。 尝试使用id属性select器。

  $('[id="test:abc"]') 

我只是使用document.getElementById ,并将结果传递给jQuery()函数。

 var e = document.getElementById('test:abc'); $(e) // use $(e) just like $('#test:abc') 

使用两个反斜杠\\

DEMO

就像这里写的

如果您希望使用任何元字符(如!“#$%&'()* +,。/ :; <=>?@ [] ^`{|}〜)作为如果你有一个id =“foo.bar”的元素,你可以使用select符$(“#foo \ .bar”)。W3C CSS规范包含完整的

参考

参照Toskan的回答,我更新了他的代码,使其更具可读性,然后输出到页面。

这是jbin链接: http ://jsbin.com/ujajuf/14/edit。

另外,我用更多的迭代运行它

 Iterations:1000000 Results: 12794 $("#annyoing\\:colon") 12954 $("[id='annyoing:colon']" 754 $(document.getElementById("annyoing:colon")) 3294 $("#nocolon") 13516 $("[id='nocolon']") 

更:

 Iterations:10000000 Results: 137987 $("#annyoing\\:colon") 140807 $("[id='annyoing:colon']" 7760 $(document.getElementById("annyoing:colon")) 32345 $("#nocolon") 146962 $("[id='nocolon']") 

尝试使用$('#test\\:abc')

这个语法$('[id="test:abc"]')为我工作。 我正在使用Netbeans 6.5.1 ,它生成一个包含一个id : (colon) 。 我试过\\\3A但都没有工作。

使用$('[id=id:with:colon]')