上帝我觉得我是垃圾邮件堆栈溢出,这是我今天的第3篇帖子。对不起,嘿。
我之前甚至发过一个关于此问题的问题,但是我已经改变了一些代码,因为我觉得发布一个新问题会更好。
$('.pmlist ul li h4 .toggle').click(function() {
$(this).closest('.meddel').toggle(250);
});
这就是我现在所拥有的。 nearest()方法不起作用的原因是因为div .meddel紧挨着h4元素。而nearest()只在DOM树上爬行,忽略其他子元素。对? parent()的工作方式几乎相同,也不起作用。
因为我只想切换元素中最接近的.meddel div,我需要一些东西,是的,只是抓住最近的那个,而不是全部。
要清除它,这是一个列表项的HTML:
<li class="item">
<h4><a class="toggle">[topic]</a><small>2010-04-17 kl 12:54 by <u>[name]</u></small></h4>
<div class="meddel">
<span>
<img style="max-width: 70%; min-height: 70%;" src="profile-images/img.jpg" alt="" />
<a href="account.php?usr=47">[name]</a>
</span>
<p>text</p>
</div>
</li>
我有几个这样的项目,如果我点击一个切换链接,我只想切换最近的.meddel,如前所述。
感谢。
答案 0 :(得分:9)
你可以使用:
$(this).parent().next().toggle(250);
$(this).parents(".item").find(".meddel").toggle(250);
这是一个更灵活,更安全的解决方案。首先,它获取条目容器(.item
),然后找到条目的主体并切换它。它对DOM中的功能更改不太敏感。
答案 1 :(得分:5)
这是解决这个问题的另一种方法:
$('.pmlist ul li h4 .toggle').click(function() {
$(this).closest('h4').siblings('.meddel').toggle(250);
});
这一直到<h4>
,然后查找要切换的同级.meddel
元素。 You can read more on .siblings()
here。这种方法使标记更改更具弹性,但如果脚本无论如何都要紧密耦合,那么这可能不是什么大问题。
答案 2 :(得分:3)
一直向上到列表元素,然后找到包含匹配类的元素。对于大多数次要的DOM更改,这将更加健壮,即它不依赖于相对位置。
$('.pmlist ul li h4 .toggle').click(function() {
$(this).closest('li').find('.meddel').toggle(250);
});