Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过jquery获取类中最接近的元素_Jquery_Selector_Closest - Fatal编程技术网

通过jquery获取类中最接近的元素

通过jquery获取类中最接近的元素,jquery,selector,closest,Jquery,Selector,Closest,在我的代码中,一个按钮应该允许用户隐藏附近的div。 为了使事情抽象化,每当按钮具有datacollapse=“true”属性时,jQuery都应该查找类“collapsable”中最近的元素并将其隐藏。问题是,在我的页面中,层次结构会有不同的情况,因此.closest()并不总是有效。让我指出一些可能的情况: 第一种情况: <a data-collapse="true"></a> <div class="collapsable"></div>

在我的代码中,一个按钮应该允许用户隐藏附近的div。 为了使事情抽象化,每当按钮具有datacollapse=“true”属性时,jQuery都应该查找类“collapsable”中最近的元素并将其隐藏。问题是,在我的页面中,层次结构会有不同的情况,因此.closest()并不总是有效。让我指出一些可能的情况:

第一种情况:

<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)
基本上表示“if
max
不是false或0”。任何其他值都被视为true。例如,
if(5)
将作为true通过,并且(警告!)
if(-10)
也将作为true通过。在这种情况下,
max
是避免无限循环的故障保护;我将最大递归性设置为50。