0

我正在尝试使用 jQuerynext()来抓取所选元素的下一段,但是因为有一个 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/

4

2 回答 2

3

.next():获取匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

.nextAll():获取匹配元素集中每个元素的所有后续兄弟,可选地由选择器过滤。

所以这就是你的方式

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

有关树遍历的更多信息可以在 jQuery API 文档中找到。

于 2013-02-14T20:44:00.713 回答
1

您可以使用.nextAll()

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

演示:http: //jsfiddle.net/QespX/1/

这有效的唯一原因是因为.showme.clickme. .nextAll()将选择您单击的元素之后的所有.showMe元素,但由于您只有一个,它会起作用。

如果这是一个问题,您可以使用.first()来缩小结果范围:

$(this).nextAll('.showme').first().slideDown();
于 2013-02-14T20:41:09.500 回答