Javascript 从div元素中检索具有特定类的所有子元素标记
我有以下DOM树:Javascript 从div元素中检索具有特定类的所有子元素标记,javascript,jquery,html,Javascript,Jquery,Html,我有以下DOM树: <div class="myclass"> <td> // lots of td and tr elementds... </td> <div> // lots of td and tr and div elementds... ..... ..... <span class="m
<div class="myclass">
<td>
// lots of td and tr elementds...
</td>
<div>
// lots of td and tr and div elementds...
.....
.....
<span class="myspan">
// lots of td and tr and div elementds...
.....
.....
</span>
</div>
</div>
如何使用JQuery检索主div元素内的myspan类的所有span元素
我想说得更清楚一些:
我需要的是一个元素列表,其中class=myspan位于当前div元素下,代码应该添加到我编写的地方
因为每个div元素将有一组不同的元素
我希望我现在能把自己说清楚。
请帮忙,
谢谢如果我没弄错,那么你需要功能 类似于以下代码:
var spans = $("div.myclass").find('span.myspan');//cache the span
spans.each(function(i,e) {//do what you need
$(this).addClass('test');//just a sample action
});
同样可以通过一条线实现,如下所示
$("div.myclass").find('span.myspan').addClass('test');
但这取决于你想要实现什么。
这是一把小提琴试试这个:
$(document).ready(function() {
$("div.myclass").find(".myspan");
});
如果您只有一个div
元素,或者希望所有span.myspan
元素(甚至跨多个div.myclass
元素)位于同一集合中,则不需要。每个
更新
虽然$(.div.myclass.myspan”)
是有效的,$(.div.myclass”).find(.myspan)
实际上要快得多
请看这篇文章,它演示了。find
比简单地将类添加到选择器快93% 这应该能帮到你
$("div.myclass span.myspan").each(function() {
console.log(this);
});
编辑
下面的代码显示了另一种方法,即保留父上下文。此更新基于对此答案的评论。我留下了最初的答案(如上),按照最初问题的措辞,它可能对其他偶然发现这个答案的人有用
$("div.myclass").each(function(i) {
console.log("spans within div index " + i);
$(this).find(".myspan").each(function() {
console.log(this);
});
});
您可以将代码缩短如下
var myspan = $("div.myclass span.myspan ");
当您可以将其作为选择器的一部分添加时,为什么要使用find
?有什么性能方面的东西吗?@ErikE-事实上,将其添加为选择器的一部分会更好地提高性能。然而,基于他的实现,我认为这可能更具适应性,原因如下我的示例代码所述。总而言之,将它们放在选择器中,如@ryanbrill和@Sushil所做的,将导致所有元素都放在一个集合中。我的代码也一样,但我保留了原样,以防他希望使用。每个,调整解决方案,以便在不同的时间分别对集合进行操作。本质上,我想向他介绍.find
。我可以看出,尽管在我看来,你应该向他展示“最好”的方式,然后针对不同的用例介绍其他可能性。我认为这是一个公平的说法。正如最好的答案已经指出的那样,我将把它留给教育目的,但我会更加认真地继续下去。事实上,既然OP更详细地解释了他想要什么,那么find
语法似乎正是他所需要的,因为他想枚举每个div
,一次只对那组子对象做一些事情。所以你比我走得更好!我只是想了解人们为什么选择以某种方式回答问题的原因,因为如果没有它,OP通常会变得毫无头绪……当您可以将其作为选择器的一部分添加时,为什么要使用find
?有性能方面的问题吗?你说得对,但我不确定哪一个更快?很好。。。但是有人打了你。哦,好的谢谢如果在myspan类中还有其他元素,比如span,该怎么办。。我怎样才能取回它们?不仅仅是span元素?只需省去标记名,它将找到类的所有元素:$(“div.myclass.myspan”)
@ryanbrill在我的示例代码中,我循环抛出类myclass的所有div,我需要的是从当前(!)中获取包含类myspan的元素div-从你的代码中我得到了所有的跨度。这不是我需要的,我只想知道当前divIn的跨度,如果是这样的话,你可能会想要这样的:@ryanbrill把你更新的小提琴代码直接放在你的答案里怎么样?这将大大改善它。
var myspan = $("div.myclass span.myspan ");