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

我有一个带ID的div

这个jquery选择器工作

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

但事实并非如此

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

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

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

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

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

根据jQuery文档 :

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

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

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

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

 $(document.getElementById(yourId)) 

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

$("#updates-pane-user\\.followed_on")这应该按照Jquery文档工作

 // Does not work $("#some:id") // Works! $("#some\\:id") // Does not work $("#some.id") // Works! $("#some\\.id") 

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

因为. selector认为有一个具有以下名称的类

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

表示:查找id = updates-pane-user所有元素,其中包含类名followed_on

用它来逃避你的点:

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

参考: http : //docs.jquery.com/Frequently_Asked_Questions#How_do_I_select_an_element_by_an_ID_that_has_characters_used_in_CSS_notation.3F

肯定会为JQuery创建问题以识别模式。

jQuery有三种类型的选择器:

  1. "." selector表示按类名选择元素。
  2. "#"选择器表示按ID选择元素。
  3. 和元素选择器,按名称( divinput等)选择元素

而且您已经将jQuery engine与ID的命名约定混为一谈。

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

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

看看这个错误的小提琴并尝试使用//更正: http : //jsfiddle.net/ukJ8Z/

干杯!!

是的吉博答案是正确的,但你仍然可以使用\\转义角色

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

逃脱两(2)个反斜杠。

检查此链接,了解How do I select an element by an ID that has characters used in CSS notation?

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

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

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