使用 jQuery 处理元素 ID 中的冒号

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

<div id="test:abc">


$('#test:abc')

没有结肠也能正常工作。我们没有控制身份证的生成,因为它是自动生成的特立尼达拉岛子表单,因为它附加子表单与 :的每个元素内。

46812 次浏览

您需要使用两个反斜杠来转义冒号:

$('#test\\:abc')

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

使用两个反斜杠 \\

演示

就像这里写的一样

如果您希望使用 元字符(如 “ # $% &’() * + ,./: ; < = > ?@[] ^ ‘{ | } ~)作为 名字的字面部分,你必须 用两个逃避角色 反斜杠: 。例如,如果你 如果有一个 id = “ foo.bar”的元素,则 可以使用选择器 $(“ # foo. bar”)。 W3C CSS 规范包含 完整

参考文献

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

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

显然,它在冒号上出错了,因为 jQuery 试图将其解释为一个选择器。尝试使用 id 属性选择器。

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

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

这种语法 $('[id="test:abc"]') 对我有用。我使用 Netbeans 6.5.1 & 它生成的组件与一个包含 : (colon)id。我试了 \\\3A但都没用。

简而言之

您应该使用 $(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);

速度/时间

看看这个 测试和比较 ID 和冒号选择方法的速度

你需要打开你的防火控制台来得到结果。

我用 firefox10和 jquery 1.7.2对它进行了测试

基本上,我选择了10’000次 div,在 id 中使用冒号-使用不同的方法来实现它。然后我将结果与没有冒号的 ID 选择进行比较,结果非常令人惊讶。

以毫秒为单位的剩余时间 正确选择方法正确选择方法

299 $("#annoying\\:colon")


302 $("[id='annoying:colon']"


20 $(document.getElementById("annoying:colon"))




71 $("#nocolon")


294 $("[id='nocolon']")

尤其是

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

有点出乎意料