获取某个元素之后的所有元素,包括他们的孩子

时间:2012-12-12 20:01:11

标签: jquery

我正在尝试编写一些动态代码,我无法确定我所追求的元素是兄弟姐妹的兄弟姐妹。 我只有一个类,必须在我的元素之后搜索具有此类的第一个元素。 例如:

   <something class='EitherMe'/>

   <table>
     <thead class = 'EitherMe'></thead>
     <tbody>
       <tr class = 'selectAfterThis'><td></td></tr>
        .
        .
        .
     </tbody>
     <tfoot class ='EitherMe'>
       <tr></tr>
       <tr class='OrMe'></tr>
     </tfoot>
   </table>

   <something class='OrMe'/>

根据用户的需要,我会得到'EitherMe'或'OrMe'。我需要选择'selectAfterThis'之后的那个类的元素

nextAll()不起作用。因为它只能得到兄弟姐妹。 有没有办法做到这一点?

更新:我把thead放在上面的例子中。因为大多数建议都是通过父母进行的。我真的不知道是否没有更高级别的元素。 我可以通过限制班级的确切位置来限制我的插件,但我想尽可能避免这种情况。

update2:简单地说,我需要具有指定类的元素,它位于'selectAfterThis'之下,无论是在他之下,还是远在他之下,或者它与'selectAfterThis'的亲子关系无关紧要< / p>

更新3:这是我从wirey的回答中写的迷你插件。希望它可以帮助像我这样有问题的其他人:http://jsfiddle.net/jTLt2/4/。所有学分都变得有线。我只是做了一些修改,使它比父母兄弟姐妹和父母兄弟姐妹的孩子更深入。

如果你测试它,请告诉我。我想知道它是否100%工作

这是代码:

(function($){
    $.fn.nextInView = function(selector)
    {
        var ret = this.nextAll(selector);      
        for(var i = 0;this.parents().eq(i).find('body').length < 1 ;i++){
            ret = ret.add(this.parents().eq(i).nextAll(selector));  
            ret = ret.add(this.parents().eq(i).nextAll().find(selector));
        }            
        return ret.first();
    }
})(jQuery)

1 个答案:

答案 0 :(得分:1)

您需要将它们分别添加到集合中..然后从集合中获取第一个以找到最接近的集合

// get siblings first - they will always be before parents
var ele = $('.selectAfterThis').nextAll('.OrMe');
// get parent siblings after current parent - they will be before their children
ele = ele.add($('.selectAfterThis').parent().nextAll('.OrMe'));
// get descendants that match of parent slibings
ele = ele.add($('.OrMe',$('.selectAfterThis').parent().nextAll()));
// now get first in collection
ele.first();​

http://jsfiddle.net/fRq4z/