为什么jquery id选择器不支持特殊字符

时间:2015-08-19 17:20:58

标签: javascript jquery

当使用特殊字符查找$("#search@")下面的元素时,将发生异常。怎么解决? 我尝试过使用所有特殊字符,但它使用*字符$("#search*")没有任何错误,但其他人#$%^&()会抛出错误。所以它接受了*字符,但为什么其他字符没有。

3 个答案:

答案 0 :(得分:2)

如果id有特殊字符,则在访问它们时应使用\\(两个反斜杠)将它们转义。但据我所知,只有html5才允许这样做。

jquery selector documentation

中所述
  

使用任何元字符(例如   !“#$%&'()* +,。/:;< =>?@ [] ^`{|}〜)作为名称的字面部分,必须   用两个反斜杠逃脱:\。例如,一个元素   id =“foo.bar”,可以使用选择器$(“#foo \ .bar”)。

alert($("#search\\$").html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id="search$">Heh</div>

答案 1 :(得分:0)

尝试使用Attribute Equals Selector [name="value"]

&#13;
&#13;
$("[id='search@']").click(function() {
  $(this).html(this.id)
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="search@">click</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

不允许使用许多特殊字符(Which characters are valid in CSS class names/selectors?)。

一种仍然选择你想要的东西的方法,通过查找除了特殊字符以外的所有字符,可以看到标记id中某些内容的开头,结尾或包含的内容。

  1. 以:jQuery ID starts with

    开头
    $('[id^="start-with"]')
    
  2. 结束于:jQuery Selector: Id Ends With?

    $('[id$="ending-part"]')
    
  3. 包含在jQuery ID Contains

    内的某处
    $('[id*="any-spot-at-all"]')
    
  4. 当然还有其他方法可以“给猫皮肤” - 例如,只查找idclass的一部分或任何其他HTML标记属性的其他选择器选项在http://api.jquery.com/category/selectors/attribute-selectors/