1

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

   <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”的父子关系都无关紧要

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

如果你测试它,请告诉我。我想知道它是否 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)
4

1 回答 1

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/

于 2012-12-12T20:10:55.313 回答