用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]')
。