如何在jQuery中选择具有特定ID的所有元素?


76

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

我尝试了这个,但是没有用

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

20
ID是唯一的。使用类。
安东尼·卡西

25
大家都知道,这里没有人回答他的问题。
2012年

4
并非总是可以有唯一的ID,至少我负担不起。好吧,@ mydoghasworms很好地回答了[1]这个问题。[1]:stackoverflow.com/questions/902839/...
Fr0zenFyr

Answers:


38

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

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

这还有一个额外的好处,就是能够基于jQuery('。countdown')。length的返回来重建ID。


好了,如何向每个倒数计时器添加多个类。IE浏览器:

<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上。
Ballsacian1年9

Ballasacian:谢谢!那太好了!就像我想要的方式!不知道为什么我以前没有想到过!
马克

1
重要的是要有一个完整的假设前提,而不是变通办法。即使您认为前提条件不是最佳条件,也通常是给定的(例如,为以这种方式使用id标签的现有网站编写Greasemonkey脚本)。
shiggity

这不应是公认的答案。在某些情况下(例如,lubricmonkey脚本),其中有人无法控制html,并且肯定有站点多次使用相同的id。
布鲁斯

401

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

使用时

jQuery("#elemid") 

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

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

jQuery("[id=elemid]") 

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

jQuery("div[id=elemid]") 

132
您是回答问题的唯一人。
wcm

7
至少有人知道如何在jQuery中做真正的事情……天哪!我很想知道这一点,没有别的办法。我根本无法接受所有其他人使用类的方法,因为我已经在那里做其他工作。冰雹@mydoghasworms !!
Fr0zenFyr

3
这是正确的答案,应该接受,+ 1
Zach 2014年

4
美丽而简单。谢谢。
James Manes 2014年

3
我正要说:这里有很多建议,但没有答案。相反,幸运的是您回答正确,我认为这应该是可以接受的,即使@ Ballsacian1建议的方法可以很好地避免此问题。
gigaDIE 2014年

35

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

HTML标准

id =名称[CS]此属性为元素分配名称。此名称在文档中必须唯一。

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


1
还应该注意的是,大多数jQuery和其他库的底层getElementById()函数最终都会调用以执行实际搜索,但拒绝返回除匹配给定ID的第一个(或随机?)元​​素外的任何内容,支持它意味着手动操作走DOM。只是不值得为无效的标记!
Ironfroggy

1
关于这篇文章:有趣的是,有一个javascript函数getElementsByName(xxx)-注意复数-暗示具有多个同名元素是完全合法的……
Jimbo 2009年

1
@Jimbo-是的,但我的回答是关于具有相同元素的元素id,而不是name
艾曼·胡里

2
@Jimbo —好吧,是的,广播组取决于此功能。并非所有元素都可以具有名称。这个问题提到了div,但它们没有name属性。
昆汀



2

您可以为每个不同的计时器分配唯一的CSS类吗?这样,您可以将选择器用于CSS类,这样可以很好地处理多个div元素。


保罗,不,我不能为每个计时器使用唯一的类,因为我使用该类选择所有计时器,以初始化和设置倒数计时器的样式。
在2009年

1
HTML类。人们几乎只使用类来匹配CSS选择器,但这并不能使它们成为另一种语言的一部分。
昆汀

0

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

干得好:

<div id="wraper1">
<div id="div1">
</div>
<div id="wraper2">
<div id="div1">
</div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.