jQuery没有抓取基于ID选择器的元素

时间:2012-09-26 12:38:06

标签: jquery html html-table jquery-selectors

我正在使用jQuery 1.7.1,而没有其他JS库/框架。我可以选择大多数元素,除了一个给我带来麻烦的特定表格。这在Firefox和Chrome中都会发生。

这是描述一切的图像:

Chrome JavaScript console

此图片中的步骤依次为:

  1. 我选择页面上的所有表格
  2. 我选择的表格与我想要的表格不同
  3. 我将该表设置为“display:none”(只是为了说明jQuery不关心“display:none”)
  4. 我再次选择该表,因为它已被隐藏。一切都很好。
  5. 然后我尝试选择我真正想要的表格。我得不到任何回报。
  6. 我使用表的初始数组将我想要的表分配给变量。
  7. jQuery返回该表就好了,它现在位于变量“theTableIWant”中。
  8. 该表的“id”与我在步骤#5中选择的“id”完全相同,但是没有用。
  9. 为什么jQuery不会把桌子交给我?为什么会发生这种情况?

5 个答案:

答案 0 :(得分:3)

它不起作用,因为#是ID的jQuery选择器中的特殊字符,因此您收到此错误:Syntax error, unrecognized expression: #office_set-###

如果您真的必须在ID中使用###(由于Matt发布的原因我不建议使用它),您可以在选择中将其转义为:

​$('#office_set-\\#\\#\\#')

示例 - http://jsfiddle.net/infernalbadger/fpcME/

您必须双重转义,因为您确实希望将\传递给jQuery选择器引擎。

答案 1 :(得分:2)

“#”在DOM ID中没有正式有效:http://www.w3.org/TR/REC-xml/#NT-Name,因此您无法获得一致的支持。

答案 2 :(得分:2)

你不应该在你的id,类标记名,属性和值中使用任何这些元字符:!"#$%&'()*+,./:;<=>?@[\]^{|}~(也是反引号:`,但我不能把它放在代码块中^^)。

如果你必须使用这些字符,你可以使用两个反斜杠在选择器中转义它们

$('#office_set-\\#\\#\\#')

顺便说一下,当这些字符用作javscript代码时,你的问题是非常相关的,例如在onclick属性中。只有在正确转义元字符时才会找到包含特定代码的元素(其中会有很多元素)。

来源和更多信息: http://api.jquery.com/category/selectors/

答案 3 :(得分:0)

1)确保步骤5中表格的选择器是正确的。也许有多个元素具有相同的id。

2)当您将JQuery元素分配给变量时,您无法像这样调用原始DOM属性。尝试:

theTableIWant.attr('id');

或者:

var theTable = $(theTableIWant).get(0);
theTable.id;

答案 4 :(得分:0)

您需要引用ID中的#个字符,因为该字符是jQuery的特殊字符。

$('#office_set-\\#\\#\\#');

它是双反斜杠,因此JavaScript将它们转换为jQuery然后看到的单个反斜杠。