2012-12-12 179 views
0

我正在尝试编写一些动态代码,并且我无法确定我之后的元素是兄弟姐妹还是兄弟姐妹的孩子。 我只有一个类,并且必须在元素后面搜索具有此类的第一个元素。 例如:获取某个元素之后的所有元素,包括其子元素

<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”或者根据用户的需要“奥玛”。我需要精确选择那个在'selectAfterThis'之后出现的元素。

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

更新:我把thead放在上面的例子中,因为大多数建议都是通过父项。我不知道是否没有高一级的元素。 我可以通过限制班级的确切位置来限制我的插件,但如果可能,我想避免这种情况。我只需要带有指定类的元素,它位于'selectAfterThis'下面,不管它是在他的下面,还是远远在他的下面,或者它与'selectAfterThis'的父子关系并不重要

更新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) 
+2

哪里是起点?什么是上下文? –

+0

让我做一个更新,如果可能的话,我想避免通过父母。因为在上面的例子中,例如中可能存在另一个具有该类的元素。尽管机会很渺茫。 – Nogitsune

+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/

+0

谢谢。我认为这是我需要的。 – Nogitsune

+0

@ user1733078您的欢迎。希望有一个更简单的方法:P ..如果我想到一个我会更新我的答案为你 –

+0

关于最后一行。 “得到父母兄弟姐妹匹配的后代”我不太明白......你能解释一下吗? – Nogitsune

相关问题