【问题标题】:jQuery - select elements that are not within a IDjQuery - 选择不在 ID 内的元素
【发布时间】:2023-03-17 20:55:01
【问题描述】:

如何选择具有title 属性但不包含在具有#boo ID 的元素中的所有元素?

点赞$("*[title]").each()...

但不是#boo 中的元素:)

【问题讨论】:

  • 如果你使用 $('div#boo') 或类似的东西,你会在这里被骂
  • 因为当您使用 id 选择器 (#) 时,它会更快,因为浏览器本身只是抓取正确的元素,而不必先筛选所有 div。虽然我很确定 jQuery 会自动将它变成一个 Id 选择器
  • @quertymk:我也不知道。我通常会尝试具体使用 ID,div#boo 而不是 #boo,因为您应该知道它们的用途,它们不像类那样开放......但从现在开始我会记住这一点开。

标签: jquery html jquery-selectors


【解决方案1】:
$("[title]").not("#boo [title]").each()

demo

附带说明,当您使用id 获取元素时,如果您不为元素的标签添加前缀,则速度会更快。例如,只需使用#boo 而不是div#boodemo

【讨论】:

  • 那么我谦卑地提交您的 l33t3r 代码。你是伟大的忍者
  • 如果我可以只为 id 与标签 + id 演示,我会再次 +1。不错的工作。编辑:漏洞,你有 cmets
【解决方案2】:

$('*:not(#boo) *[title]'); 应该可以工作。

【讨论】:

  • 有趣的方法 :) 我怀疑它不是很有效,但肯定是一种不同的思考方式。
  • 我的大脑在 CSS 选择器中比在 Javascript 中思考得更好......我更喜欢 Reigel 的答案,但我想我会自己加入。
  • @Phrogz,实际上我怀疑如果#boo 的结构很深,它可能会更有效。
  • @Box9:我的代码直觉告诉我,这将在页面上找到 每个 元素(#boo 除外),然后在每个元素上调用 getElementsByTagName('*') .也许 Sizzle 比这更聪明。
  • 这似乎对querySelectorAll 有效。这是一个很大的优势。
【解决方案3】:
$('[title]').filter(function(){return $(this).parents('#boo').length === 0;})

【讨论】:

    【解决方案4】:

    【讨论】:

      【解决方案5】:

      有很多方法可以给这只猫剥皮。这里还有两个:

      $('[title]:not(#boo *[title])');
      $('[title]').not('#boo *[title]');
      

      【讨论】:

        【解决方案6】:

        我以前必须这样做并使用过类似的东西:

        $(":not(#boo) > [title]")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-22
          • 2015-04-01
          • 2020-02-05
          • 2020-04-27
          • 2011-08-14
          • 1970-01-01
          • 2012-09-18
          相关资源
          最近更新 更多