2

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

这是描述这一切的图像:

Chrome JavaScript 控制台

此图中的步骤,按顺序:

  1. 我选择页面上的所有表格
  2. 我选择了一张与我想要的不同的桌子
  3. 我将该表设置为“显示:无”(只是为了说明 jQuery 不关心“显示:无”)
  4. 我再次选择该表,现在它已被隐藏。一切皆好。
  5. 然后我尝试选择我真正想要的表。我什么也得不到。
  6. 我使用表的初始数组将我想要的表分配给一个变量。
  7. jQuery 很好地返回了该表,它现在位于变量“theTableIWant”中。
  8. 表格的“id”与我在第 5 步中选择的“id”完全相同,但不起作用。

为什么 jQuery 不直接把桌子交给我?为什么会发生这种情况?

4

5 回答 5

3

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

如果您真的必须###在 ID 中使用(由于马特发布的原因,我不推荐它),您可以像这样在选择中对其进行转义:

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

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

您必须双重转义,因为您实际上想将 传递\给 jQuery 选择器引擎。

于 2012-09-26T12:44:06.533 回答
2

“#”在 DOM id 中不是正式有效的: http ://www.w3.org/TR/REC-xml/#NT-Name ,因此您不会得到一致的支持。

于 2012-09-26T12:42:35.417 回答
2

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

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

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

顺便说一句,当这些字符用作 javscript 代码(例如在 onclick 属性中)时,您的问题真的很重要。只有正确转义元字符(其中会有很多),才能找到包含特定代码的元素。

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

于 2012-09-26T12:47:57.717 回答
0

1) 确保第 5 步的表格选择器是正确的。也许有不止一个元素具有相同的 id。

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

theTableIWant.attr('id');

或者:

var theTable = $(theTableIWant).get(0);
theTable.id;
于 2012-09-26T12:44:27.910 回答
0

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

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

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

于 2012-09-26T12:48:00.630 回答