2011-04-18 67 views
0

它的工作原理:任何人都可以在jQuery中解释这种奇怪的行为吗?

<div class="xpav"> 
    Create 
</div> 
<div class="apr" style="display: none;"> 
    sometext 
</div> 

<script> 
$('.xpav').click(function() { 
    $(this).next(".apr").slideDown("fast");  
}) 
</script> 

它并不:

<div class="xpav"> 
    Create 
</div> 
<br /> 
<div class="apr" style="display: none;"> 
    sometext 
</div> 

<script> 
$('.xpav').click(function() { 
    $(this).next(".apr").slideDown("fast");  
}) 
</script> 

为什么
休息呢?

回答

7

.next()只查看给定元素后面的元素,然后如果提供该元素,则根据选择器检查该元素。在你的第二个例子中,由于br在那里,并且没有apr类,所以它没有被拾取。从API文档:

描述:获取紧随其后的各元素的同级集合中匹配的元素。如果提供了一个选择器,只有当它与该选择器匹配时才会检索下一个兄弟。

你的第二个例子中需要使用的.nextAll()而不是通过所有的下一个兄弟姐妹搜索:

$('.xpav').click(function() { 
    $(this).nextAll(".apr").slideDown("fast");  
}); 

要拿起只有第一.apr多数民众赞成匹配,使用.eq(0)

$('.xpav').click(function() { 
    $(this).nextAll(".apr").eq(0).slideDown("fast");  
}); 
0

因为next()会将您带到下一个DOM元素<br />。为什么不使用这样的:

$(".apr").slideDown("fast");

+1

因为那么每一个'.apr'都会动画? – BoltClock 2011-04-18 18:09:35

1

我的印象next()如果兄弟objuect是一样的DOM踏歌,

是什么工作,只有工作:

$('.xpav').click(function() { 
    console.log($(this).next(".apr")); 
    $(this).siblings(".apr").slideDown("fast");  
}) 
0

只因为你是在代码中使用next()方法。代码的第二个版本中的$('.xpav')的下一个DOM元素是<br />,因为它与过滤器不匹配,所以它不会滑动任何东西!

如果你想要它的工作,你应该考虑使用nextAll()而不是next(),因为后者只获取下一个DOM元素,前者获取DOM之后的所有兄弟元素。

1

这正是文档说的内容:“描述:获取匹配元素集合中每个元素的紧随其后的兄弟,如果提供了选择器,只有匹配该选择器时才会检索下一个兄弟。

http://api.jquery.com/next/

相关问题