jquery 使用next(),中间有块元素

y4ekin9u  于 2023-06-22  发布在  jQuery
关注(0)|答案(2)|浏览(110)

我试图使用jQuery的next()来抓取所选元素的下一段,但因为有一个div挡道,似乎next无法工作。我应该使用哪个选择器呢?
作品:

<div>
   <span class="clickme">A name here</span>
   <p class="showme" style="display:none;">Here's some text! </p>
</div>
$('.clickme').click(function() {
   $(this).next('.showme').slideDown();
});

不工作:

<div>
   <span class="clickme">A name here</span>
   <div></div>
   <p class="showme" style="display:none;">Here's some text! </p>
</div>
$('.clickme').click(function() {
   $(this).next('.showme').slideDown();
});

为什么会发生这种情况?具有指定类的next()不会超出下一个块元素吗?所以才会发生这种事吗是否有一个选择器指定应该选择showme的“下一个”类?
小提琴-http://jsfiddle.net/QespX/

yqlxgs2m

yqlxgs2m1#

.next():获取匹配元素集合中每个元素的紧接着的兄弟元素。如果提供了一个选择器,则仅当下一个同级与该选择器匹配时,它才会检索该同级。
.nextAll():获取匹配元素集合中每个元素的所有后续兄弟元素,可选地通过选择器过滤。
你就这么走了

$('.clickme').click(function() { 
    $(this).nextAll('.showme').slideDown();   //as clickme>showme
});

关于Tree Traversal的更多信息可以在jQuery API文档中找到。

ao218c7q

ao218c7q2#

可以使用.nextAll()

$('.clickme').click(function() {
    $(this).nextAll('.showme').slideDown();
});

Demo:http://jsfiddle.net/QespX/1/

之所以这样做是因为.showme.clickme的兄弟。.nextAll()将选择您单击的元素之后的所有.showMe元素,但由于您只有一个,因此它可以工作。
如果这是一个问题,您可以使用.first()来缩小结果范围:

$(this).nextAll('.showme').first().slideDown();

相关问题