天啊,我感觉自己在 Stack Overflow 上发了很多帖子,今天已经是我的第三篇了。抱歉,呵呵。
之前我甚至发过一个关于这个问题的帖子,但是我已经修改了代码,所以我认为发一个新的问题更好。
$('.pmlist ul li h4 .toggle').click(function() {
$(this).closest('.meddel').toggle(250);
});
这是我现在得到的。closest()方法不起作用的原因是div .meddel紧挨着h4元素。而closest()只会沿着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,如之前所述。
谢谢。
.parent([selector])
将返回元素的父级(如果传入了selector
,则还会检查父级是否匹配)。而.parents([selector])
将返回所有祖先元素。换句话说:parent()
只查找“一级上”的父级元素。 - Crozin.parent()
找到直接的父元素,如果它匹配选择器(如果您传递了一个,比如.parent(selector)
)。.parents(selector)
找到所有匹配的父元素,在这种情况下不应使用它,最好使用.closest(selector)
,因为它只会获取与选择器匹配的第一个/最近的父元素。如果更上面有一个class="item"
元素,那么这将突然产生非常不同的效果,切换所有子元素,除了在这种情况下的兄弟元素之外,它实际上会切换所有.meddel
。 - Nick Craver