第一个匹配元素需要 jQuery 选择器
我有以下代码:
<p class="expand">Click to expand</p>
<div class="expand-box">
<p>Some content here</p>
</div>
使用此 jquery:
$('.expander-box').hide();
$('.expand').toggle(function() {
$(this).next('.expander-box').slideDown();
}, function() {
$(this).next('.expander-box').slideUp();
});
我的问题是:此代码工作正常,但如果扩展器框不是直接位于 p.expand 标记之后,则它将无法工作。是否有比 next() 更好的选择器可以使用,以便单击时它将从单击的元素开始并向下移动页面,直到找到扩展框,然后在第一个匹配的元素上执行动画?$this
I have the following code:
<p class="expand">Click to expand</p>
<div class="expand-box">
<p>Some content here</p>
</div>
with this jquery:
$('.expander-box').hide();
$('.expand').toggle(function() {
$(this).next('.expander-box').slideDown();
}, function() {
$(this).next('.expander-box').slideUp();
});
My question is this: This code works fine, but if the expander-box is not directly after the p.expand tag then it wont work. Is there a better selector to use rather than next() so that when clicked it will start from the clicked element and go down the page until it finds an expander-box and then performs the animation on that first matched element?$this
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
.nextAll()
和:first
,如下所示:或者使用
.click()
和.slideToggle()
,如下所示:请注意,这两个都会找到下一个
.expander-box
这是同级< /strong>,如果它是一些更复杂的结构,您最好了解该结构并使用 树遍历方法导航到以this
开头的元素,类似于现在仅使用兄弟姐妹的方式。当然,像大多数情况一样,有几种可用的变体:
You can use
.nextAll()
and:first
, like this:Or much simpler with
.click()
and.slideToggle()
, like this:Note that both of these will find the next
.expander-box
that's a sibling, if it's some more complex structure you're better off knowing the structure and using tree traversal methods to navigate to the element starting withthis
, similar to how you're doing it with just siblings now.Of course, there are several variations available like most cases:
使用两个参数调用 jQuery 构造函数会在第二个参数处“根”查询:
$('.expander-box', this) 返回所有 子 的 '.expander-box' >这个。
因此,如果您使 HTML 看起来像这样:
上面的查询将执行您希望它执行的操作。
Calling the jQuery constructor with two arguments "roots" the query at the second argument:
$('.expander-box', this) returns all the '.expander-box' that are children of this.
So, if you make your HTML look like this:
The above query will do what you want it to do.