【问题标题】:How to select all elements with a particular ID in jQuery?如何在jQuery中选择具有特定ID的所有元素?
【发布时间】:2016-10-11 13:09:56
【问题描述】:

我正在尝试在 jQuery 中选择所有具有相同 ID 的 <div>s。我该怎么做?

我试过了,没用

jQuery('#xx').each(function(ind,obj){
      //do stuff;
});

【问题讨论】:

  • ID 是唯一的。使用类。
  • 这个大家都知道,但是这里没有人回答他的问题。
  • 并非总是可以拥有唯一的 ID,至少我始终负担不起。好吧,@mydoghasworms 已经[回答][1] 很好地解决了这个问题。 [1]:stackoverflow.com/questions/902839/…

标签: jquery css-selectors


【解决方案1】:

虽然这里还有其他正确的答案(比如使用类),但从学术的角度来看,当然可以有多个具有相同ID的div,并且可以使用jQuery来选择它们。

当你使用时

jQuery("#elemid") 

它只选择具有给定 ID 的第一个元素。

但是,当您按属性选择时(例如 id 在您的情况下),它会返回所有匹配的元素,如下所示:

jQuery("[id=elemid]") 

这当然适用于任何属性的选择,您可以通过指定有问题的标签来进一步优化您的选择(例如 div 在您的情况下)

jQuery("div[id=elemid]") 

【讨论】:

  • 您是唯一回答所提问题的人。
  • 至少有人知道如何在 jQuery 中做真正的事情......天哪!我很想知道这一点,没有其他工作。我根本无法接受所有其他人使用类的方法,我已经有了它来做不同的工作。万岁@mydoghasworms!!
  • 这是正确答案,应该被接受,+1
  • 美丽而简单。谢谢。
  • 我正要说:这里有很多建议,但没有答案。相反,幸运的是你回答得当,我认为这应该是可以接受的,即使@Ballsacian1 建议的方法可以很好地避免这个问题。
【解决方案2】:

我会使用不同的 ID,但为每个 DIV 分配相同的类。

<div id="c-1" class="countdown"></div>
<div id="c-2" class="countdown"></div>

这还有一个额外的好处,那就是能够根据 jQuery('.countdown').length 的返回来重构 ID


好的,为每个倒数计时器添加多个类怎么样。即:

<div class="countdown c-1"></div>
<div class="countdown c-2"></div>
<div class="countdown c-1"></div>

这样你就可以两全其美了。它甚至允许重复“IDS”

【讨论】:

  • Ballasacian:我有 n 个 id 为 1..n 的计数器,所以对于每个计数器,我都有 id=c-1,id=c-2 等,但其中一些重复。所以我不能用你的方法。他们都有相同的 class='countdown' 谢谢
  • 为什么要重复?尤其是在一个必须是唯一的 ID 上。
  • 巴拉赛克人:谢谢!那太棒了!像我想要的那样工作!不知道为什么我以前没有想到!
  • 拥有一个假设前提条件而不是解决方法的完整答案很重要。即使您认为前提条件不是最佳的,它们通常也是给定的(例如为使用 id 标签的现有网站编写 Greasemonkey 脚本)。
  • 这不应该是公认的答案。在某些情况下(例如,greasemonkey 脚本)无法控制 html,并且肯定有网站多次使用相同的 id。
【解决方案3】:

您的文档不应包含两个具有相同 id 的 div。这是invalid HTML,因此底层 DOM API 不支持它。

来自HTML standard

id = name [CS] 此属性分配 元素的名称。这个名字必须 在文档中是唯一的。

您可以为每个 div 分配不同的 id 并使用$('#id1, #id2) 选择它们。或者将相同的类分配给两个元素(例如.cls),并使用$('.cls') 来选择它们。

【讨论】:

  • 还应该注意的是,jQuery 和其他库的大多数底层 getElementById() 函数最终都会调用以执行实际搜索,除了第一个(或随机?)元​​素匹配给定的元素之外,拒绝返回任何内容ID,并支持它意味着手动遍历 DOM。只是因为无效标记不值得!
  • 关于这篇文章:有趣的是,有一个 javascript 函数 getElementsByName(xxx) - 注意复数 - 暗示拥有多个同名元素是完全合法的......跨度>
  • @Jimbo - 是的,但我的回答是关于具有相同 id 的元素,而不是 name
  • @Jimbo — 是的,广播组依赖于该功能。但并非所有元素都可以有名称。问题提到了 div,它们没有 name 属性。
【解决方案4】:

试试这个按第一个 id 选择 div

$('div[id^="c-"]')

【讨论】:

    【解决方案5】:

    $("div[id^=" + controlid + "]") 将返回所有具有相同名称的控件,但您需要确保文本不应出现在任何控件中

    【讨论】:

      【解决方案6】:

      您能否为每个不同的计时器分配一个唯一的 CSS 类?这样你就可以使用 CSS 类的选择器,它可以很好地处理多个 div 元素。

      【讨论】:

      • paul,不,我不能为每个计时器使用唯一的类,因为我使用该类来选择所有计时器,初始化倒数计时器并设置其样式。
      • HTML 类。人们几乎只使用类来匹配 CSS 选择器,这并不会使它们成为不同语言的一部分。
      【解决方案7】:

      您也可以尝试将两个 div 包装在两个具有唯一 ID 的 div 中。然后通过$("#div1","#wraper1")$("#div1","#wraper2")选择div

      给你:

      <div id="wraper1">
      <div id="div1">
      </div>
      <div id="wraper2">
      <div id="div1">
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多