无论元素类型如何,查找每个循环中的最后一个元素

时间:2013-08-05 20:59:31

标签: jquery css css-selectors

我有一系列的部分,有不同类型的元素,如:

<section>
    <div>Something</div>
    <a href="#">Some Copy</a>
    <div>Something</div>
    <a href="#">Some Copy</a>
</section>

<section>
    <a href="#">Some Copy</a>
    <div>Something</div>
    <a href="#">Some Copy</a> <a href="#">Some Copy</a>
    <div>Something</div>
</section>

我需要遍历每个部分并找到最后一个元素,无论它是div还是锚。

$("section").each(function(){
      var last = //find the last element
      last.addClass('last');
}); 

我需要帮助定义变量last。通常我会使用css'last-childlast-of-type来识别每个部分中的最后一个元素,但因为有不同类型的元素(锚点和div),我相信我需要使用javascript。 知道如何找到最后一个元素吗?

4 个答案:

答案 0 :(得分:5)

尝试

$("section").each(function(){
      var last = $(this).children(':last');
      last.addClass('last');
}); 

http://jsfiddle.net/mowglisanu/23EcJ/

答案 1 :(得分:1)

编辑:呃,嗯,jQuery有一个选择器,如Musa's answer所示。如果不使用jQuery(或者更喜欢“突击队”)的人可能需要它,请留下这个。


在现代浏览器中,您可以使用lastElementChild

$("section").each(function(){
    var last = this.lastElementChild
    // Use `last` (possibly wrapped in a jQuery instance)
});

(您可能希望将其包装在jQuery实例中。)

在较旧的浏览器上,您可以使用lastChild,然后通过previousSibling返回到最后一个元素(而不是文本节点,注释节点等):

$("section").each(function(){
      var last = this.lastChild;
      while (last && last.nodeType !== 1) {
          last = last.previousSibling;
      }
      // Use `last` (possibly wrapped in a jQuery instance)
});

答案 2 :(得分:0)

我采用了与@Musa几乎相同的方法。你可以在这里看到它:

http://jsfiddle.net/nRtsF/

$("section").each(function(){ 
      $(this).children(':last').addClass('last');
}); 

答案 3 :(得分:0)

使用:last jQuery选择器。

$('section').find(':last').each(function() {
    // Code here
});