我正在尝试编写一些动态代码,我无法确定我所追求的元素是兄弟姐妹的兄弟姐妹。 我只有一个类,必须在我的元素之后搜索具有此类的第一个元素。 例如:
<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)
答案 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();