我们无法使用jQuery在JS代码中访问ID为“test:abc”的div元素。
<div id="test:abc">
$('#test:abc')
没有冒号就行了。我们无法控制ID生成,因为它是在Trinidad子表单中自动生成的,因为它将带有:
的子表单ID附加到其中的每个元素。
答案 0 :(得分:194)
你需要使用两个反斜杠来逃避冒号:
$('#test\\:abc')
答案 1 :(得分:81)
简而言之
你应该使用 $(document.getElementById("test:abc"))
。
<强>解释强>: 除了速度增益(见下文),它更容易处理。
示例:假设您有一个功能
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 which tests and compares the speed of selection methods of IDs with colons
您需要打开firebug控制台才能获得结果。
我用firefox 10和jquery 1.7.2
测试了它基本上我选择了一个带有冒号的div的10'000次div - 用不同的方法来实现它。然后我将结果与没有冒号的ID选择进行比较,结果非常令人惊讶。
以ms为单位的剩余时间 右选择器方法
299 $("#annoying\\:colon")
302 $("[id='annoying:colon']"
20 $(document.getElementById("annoying:colon"))
71 $("#nocolon")
294 $("[id='nocolon']")
尤其
71 $("#nocolon") and
299 $("#annoying\\:colon")
有点令人惊讶
答案 2 :(得分:29)
$('[id="test:abc"]')
答案 3 :(得分:8)
我只会使用document.getElementById
,并将结果传递给jQuery()
函数。
var e = document.getElementById('test:abc');
$(e) // use $(e) just like $('#test:abc')
答案 4 :(得分:5)
使用两个反斜杠\\
写在这里
如果你想使用任何一个 元字符(例如 !“#$%&amp;'()* +,。/:;&lt; =&gt;?@ [] ^`{|}〜) 文字的一部分,你必须 用两个逃避角色 反斜杠:\。例如,如果你 有一个id =“foo.bar”的元素,你 可以使用选择器$(“#foo \ .bar”)。 W3C CSS规范包含 完整
答案 5 :(得分:4)
参考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']")
答案 6 :(得分:3)
尝试使用$('#test\\:abc')
答案 7 :(得分:1)
此语法$('[id="test:abc"]')
为我工作。我正在使用Netbeans 6.5.1
&amp;它会生成包含id
的{{1}}的组件。我试过了: (colon)
&amp; \\
,但没有一个工作。
答案 8 :(得分:0)
使用$('[id=id:with:colon]')
。