通过jquery获取类中最接近的元素
在我的代码中,一个按钮应该允许用户隐藏附近的div。 为了使事情抽象化,每当按钮具有datacollapse=“true”属性时,jQuery都应该查找类“collapsable”中最近的元素并将其隐藏。问题是,在我的页面中,层次结构会有不同的情况,因此.closest()并不总是有效。让我指出一些可能的情况: 第一种情况:通过jquery获取类中最接近的元素,jquery,selector,closest,Jquery,Selector,Closest,在我的代码中,一个按钮应该允许用户隐藏附近的div。 为了使事情抽象化,每当按钮具有datacollapse=“true”属性时,jQuery都应该查找类“collapsable”中最近的元素并将其隐藏。问题是,在我的页面中,层次结构会有不同的情况,因此.closest()并不总是有效。让我指出一些可能的情况: 第一种情况: <a data-collapse="true"></a> <div class="collapsable"></div>
<a data-collapse="true"></a>
<div class="collapsable"></div>
第二种情况:
<div class"controls">
<a ...></a>
<a ...></a>
<a data-collapse="true"></a>
</div>
<div class="collapsable"></div>
第三种情况:
<div class="collapsable">
...
<a data-collapse="true"></a>
</div>
...
可能会有更多的案例
我的问题是:是否有一种通用方法可以调用a按钮来查找类“collapsable”中最近的div,而不管要查找哪个方向?比如,只是在两个方向上缩小,直到找到匹配项?您的问题:
是否有一种通用方法可以调用a按钮来查找类“collapsable”的最近div,而不管要查找哪个方向
简言之,我会回答:不!没有
但是你可以检查一下这样的元素,也许这会有帮助:
var $collapsable = $('a[data-collapse="true"]').next('.collapsable') ||
$('a[data-collapse="true"]').prev('.collapsable') ||
$('a[data-collapse="true"]').parent().next('.collapsable') ||
$('a[data-collapse="true"]').parent().prev('.collapsable') ||
$('a[data-collapse="true"]').parent().find('.collapsable') ||
$('a[data-collapse="true"]').closest('.collapsable');
我想到的是:在单击元素的父元素中进行递归搜索 我已经用大量嵌套和分离的示例演示了代码,请在下面运行它
$([data collapse=true])。单击(function(){
var$elem、$searchIn、max、result;
$searchIn=$(此项);
$elem=null;
结果=空;
max=50;//最大递归性
while($elem==null)和&max){
结果=$searchIn.find('.collapsable');
如果(结果长度){
$elem=result.first();
}
$searchIn=$searchIn.parent();
马克斯;
}
$elem.css(“边框”、“红色虚线2px”);
});代码>
我应该变红
我应该变红
我应该变红
我应该变红
感谢您的回复!我希望我能接受这两个答案。&&max,这个短代码是怎么工作的?我假设它只在max>0yesp时返回true,if(max)
基本上表示“ifmax
不是false或0”。任何其他值都被视为true。例如,if(5)
将作为true通过,并且(警告!)if(-10)
也将作为true通过。在这种情况下,max
是避免无限循环的故障保护;我将最大递归性设置为50。