在给定元素之后查找第一个与选择器匹配的元素的jQuery选择器

13

假设我有这个HTML:

 <textarea>blah</textarea>
 <br>
 <div class="select_this">hello!</div>
当我已经确定了文本区域,如何选择具有"class = select_this"的DIV? 我不想在整个文档上使用类选择器,因为我正在处理一个大文档,并且在旧浏览器中类查找速度较慢。jQuery的.next()方法似乎不起作用,closest()只能查找DOM树,而.nextUntil()可以匹配除了"select_this" div之外的其他所有内容。还有其他选项吗?

非常相关的答案,适用于一个非常相似的问题。 - cregox
2个回答

21

有两种方法可以做到这一点。

如果你只有几个兄弟姐妹,可以使用以下方法:

$('textarea').nextAll('div.select_this').first();
这样做的缺点是它会测试每个后续元素以查看是否与选择器匹配,即使它已经找到了第一个。如果你有很多兄弟姐妹,请使用这种方法来节省评估时间:
$('textarea').nextUntil('div.select_this').andSelf().last().next();
注意,最好使用firstlast方法,而不是它们对应的选择器(:first, :last),因为浏览器无法本地理解这些选择器,这会大大降低表达式的速度。编辑以包含andSelf,根据下面的评论。


1
第二个示例不起作用,如果两个元素紧挨着,因为nextUntil()调用返回一组空结果。 - tnunamak
答案真的应该包括 @tnunamak 说的话。 - Zitrax
1
@tnunamak的答案已经修改以考虑到这一点。 - lonesomeday

3
你想使用 nextAll
jQuery(yourTextarea).nextAll('.select_this:first');

1
好奇的问题:使用“:first”时,jQuery是否会在找到第一个元素后停止查找,还是会搜索整个DOM,然后返回它找到的第一个元素? - Elliot B.
@lonesomeday -- 哎呀,那不太好,有没有办法实现前者? - Elliot B.
1
@ElliotB。请看我的回答,它正好涉及到这一点 :-) - lonesomeday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接