第一个匹配元素需要 jQuery 选择器

发布于 2024-10-03 21:55:51 字数 525 浏览 2 评论 0原文

我有以下代码:

<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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说晚安 2024-10-10 21:55:51

您可以使用 .nextAll():first,如下所示:

$('.expander-box').hide();
$('.expand').toggle(function() {
   $(this).nextAll('.expander-box:first').slideDown();
}, function() {
   $(this).nextAll('.expander-box:first').slideUp();
});

或者使用 .click().slideToggle(),如下所示:

$('.expander-box').hide();
$('.expand').click(function() {
   $(this).nextAll('.expander-box:first').slideToggle();
});

请注意,这两个都会找到下一个 .expander-box 这是同级< /strong>,如果它是一些更复杂的结构,您最好了解该结构并使用 树遍历方法导航到以this开头的元素,类似于现在仅使用兄弟姐妹的方式。


当然,像大多数情况一样,有几种可用的变体:

$(this).nextAll('.expander-box:first').slideToggle();
$(this).nextAll('.expander-box').first().slideToggle();
$(this).nextAll('.expander-box').eq(0).slideToggle();
//etc..

You can use .nextAll() and :first, like this:

$('.expander-box').hide();
$('.expand').toggle(function() {
   $(this).nextAll('.expander-box:first').slideDown();
}, function() {
   $(this).nextAll('.expander-box:first').slideUp();
});

Or much simpler with .click() and .slideToggle(), like this:

$('.expander-box').hide();
$('.expand').click(function() {
   $(this).nextAll('.expander-box:first').slideToggle();
});

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 with this, similar to how you're doing it with just siblings now.


Of course, there are several variations available like most cases:

$(this).nextAll('.expander-box:first').slideToggle();
$(this).nextAll('.expander-box').first().slideToggle();
$(this).nextAll('.expander-box').eq(0).slideToggle();
//etc..
一绘本一梦想 2024-10-10 21:55:51

使用两个参数调用 jQuery 构造函数会在第二个参数处“根”查询:

$('.expander-box', this) 返回所有 的 '.expander-box' >这个。
因此,如果您使 HTML 看起来像这样:

<p class="expand">Click to expand
<div class="expand-box">
   <p>Some content here</p>
</div>
</p>

上面的查询将执行您希望它执行的操作。

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:

<p class="expand">Click to expand
<div class="expand-box">
   <p>Some content here</p>
</div>
</p>

The above query will do what you want it to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文