我有一个按钮,该按钮使用jQuery的slideToggle()
函数显示或隐藏具有特定类的div,并且它工作正常,除非存在另一个曾经被隐藏但现在在混合中可见的div。
我还使用jQuery从按钮的click事件中选择我要的div,如下所示:
$(".MyButton").click(function () {
var theDiv = $(this).next(".TheDivImAfter");
theDiv.slideToggle();
});
我了解到jQuery的next()
函数实际上只是查看下一个元素,并且当在此之间存在一个曾经被隐藏但现在可见的元素时,next()
函数会看到该元素,并且由于类不匹配,因此不选择任何内容。这是有道理的。
我也尝试过nextUntil()
,但这也什么也没选择,这对我来说没有意义。我还尝试了find()
,first()
和siblings()
并取得了不同程度的成功,最终想知道为什么没有siblingsUntil()
是因为.TheDivImAfter
和{ {1}}是兄弟姐妹。
我一直在尝试伪选择器,例如.TheDivThatWasOnceHidden
:
:not
但是在那些情况下它仍然不起作用。
有没有办法让它跳过或忽略曾经隐藏的div上的类?
我感谢任何人都能提供的帮助,但我仍然想知道为什么$(this).next(".TheDivImAfter:not(.TheDivThatWasOnceHidden)");
无法正常工作。
谢谢
答案 0 :(得分:1)
我认为您在focus()
之后。以下是根据click()
API的区别;
nextAll()
说明:获取匹配元素集中每个元素的所有后续同级元素,可选地由选择器过滤。
nextUntil()
说明:获取每个元素的以下所有同级,直到但不包括与选择器,DOM节点或传递的jQuery对象匹配的元素。
您可以看到主要区别在于nextAll()
排除了提供的选择器匹配的元素。这两个函数都会使用一个过滤器,以精确到达您要使用的jQuery
。
nextUntil