为什么这个jquery选择器没有句点工作

时间:2013-02-07 14:25:12

标签: jquery jquery-selectors

我有一个带ID的div

<div id="updates-pane-user.followed_on">

这个jquery选择器工作

$("[id^='updates-pane']")

但这不是

$("#updates-pane-user.followed_on")

我看不出有什么问题。身份证名称可以包括句号吗?我错过了一些明显的东西吗?

9 个答案:

答案 0 :(得分:31)

在后一个选择器中,.用于表示一个类。所以它正在寻找.followed_on类,它显然没有找到,因此没有匹配。

为了解决这个问题,我认为你应该用双反斜杠来逃避点:

$("#updates-pane-user\\.followed_on")

根据jQuery docs

  

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

一般情况下,请尝试在ID中使用句点或其他特殊字符,以避免混淆。 “允许”与“良好做法”不同。

答案 1 :(得分:4)

是的,HTML5允许使用id的句点,但j3不是由w3 org构建的。它只是针对最常见情况进行了优化的实用程序库。

如果您的ID有一个句点或任何其他字符使jQuery解析它不仅仅是一个id,那么您最好使用标准函数:

$(document.getElementById(yourId))

如果您的ID来自变量,则这是首选解决方案。

答案 2 :(得分:4)

$("#updates-pane-user\\.followed_on") - 这应该按照Jquery documentation

工作
// Does not work
 $("#some:id")

 // Works!
 $("#some\\:id")

 // Does not work
 $("#some.id")

 // Works!
 $("#some\\.id")

答案 3 :(得分:3)

由于id属性中的点,jQuery语法中的点表示类选择器。 此选择器相当于选择节点:

<div id="updates-pane-user" class="followed_on">

答案 4 :(得分:2)

因为.选择器认为存在具有以下名称的类

$("#updates-pane-user.followed_on")

表示:查找ID = updates-pane-user且类名为followed_on

的所有元素

答案 5 :(得分:2)

答案 6 :(得分:2)

为JQuery识别模式的确定期间创建问题。

jQuery有三种选择器:

  1. "."选择器表示按类名选择元素。
  2. "#"选择器表示按ID选择元素。
  3. 元素选择器,按名称选择元素(divinput 等)
  4. 您已将jQuery engine与ID的命名约定混为一谈。

    假设有一个div为id="updates-pane-user"且已应用class="followed_on"。在这种情况下,jQuery建议使用//转义序列。下面应该是你的syntex来选择元素。

    $("#updates-pane-user\\.followed_on");
    

    检查出这个错误的小提琴并尝试使用//进行更正:http://jsfiddle.net/ukJ8Z/

    干杯!!

答案 7 :(得分:1)

是的Jimbo答案是正确的,但你仍然可以使用\\

逃避角色
$("#updates-pane-user\\.followed_on")

逃避两(2)个反斜杠。

点击link查看How do I select an element by an ID that has characters used in CSS notation?

答案 8 :(得分:0)

您还可以使用id属性选择器,例如:

$('[id="updates-pane-user.followed_on"]')

因为jQuery会将该属性视为字符串,而不是jQuery类选择器。