【问题标题】:jQuery Isn't Grabbing an Element Based on ID SelectorjQuery 不基于 ID 选择器抓取元素
【发布时间】:2012-09-18 02:08:48
【问题描述】:

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

这是一个描述一切的图片:

此图中的步骤,按顺序:

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

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

【问题讨论】:

    标签: jquery html html-table jquery-selectors


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 请注意,对于选择器语法,您必须使用 \ 转义 #,然后对于 JavaScript 字符串语法,您必须使用另一个 \ 转义 \。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

        1) 确保第 5 步的表格选择器是正确的。可能有多个元素具有相同的 id。

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

        theTableIWant.attr('id');
        

        或者:

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

        【讨论】:

        • 我没有分配 jQuery 元素。 $('table') 选择了表格,然后 [1] 选择了该数组中的第二个 HTML 元素,而不是 jQuery 元素。
        • 另外,页面上肯定没有其他任何具有该 ID 的内容。根据马特的回答,“#”是不允许的,这是有道理的。
        • 这个答案没有回答问题提出的具体问题。修改以回答特定问题,甚至可能删除您的答案。
        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-05
          • 2012-06-22
          • 2023-04-03
          • 2017-09-14
          • 2023-03-17
          • 2011-01-05
          • 1970-01-01
          相关资源
          最近更新 更多