Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从div元素中检索具有特定类的所有子元素标记_Javascript_Jquery_Html - Fatal编程技术网

Javascript 从div元素中检索具有特定类的所有子元素标记

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

我有以下DOM树:

<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 ");