jQuery最近的排除自身

nimxete2  于 2023-02-15  发布在  jQuery
关注(0)|答案(5)|浏览(102)

closest()将通过测试元素本身并遍历DOM树中的祖先元素来获得第一个匹配选择器的元素,但我想知道是否有任何方法可以获得不包括其本身的结果(我的意思是只获得它的父元素)。
我举一个例子,请大家回顾一下。

<div id='div1' class="container">
    <div id="div2" class="container">
        <!--many nested div.container as it directly or indirectly children -->
    </div>
    <div id="div3" class="container">
        <!--many nested div.container as it directly or indirectly children -->
    </div>
</div>

$(function() {

    $('div.container').on('mouseover', function(e){
        //I only want to select the first parent with the class container.
        //closest include the this element. 
        console.log($(this).closest('.container').attr('id'));
    });
});
azpvetkf

azpvetkf1#

在尝试查找.closest()祖先之前,可以向上遍历一个级别:

$(this).parent().closest('.container');
watbbzwu

watbbzwu2#

香草js:

el.parentElement.closest('.container')

查询:

el.parent().closest('.container');
nxowjjhe

nxowjjhe3#

正确答案是.parents('.container:first');谢谢

iezvtpos

iezvtpos4#

如果你真的只需要父div,那么yes $(this).parents('. container')就可以了。如果你想寻找最近的元素并允许它成为兄弟元素(这似乎是你实际上想要实现的),你可以使用$(this).prev('. container')。

u59ebvdq

u59ebvdq5#

这是因为.closest()的工作方式是 "测试元素本身并遍历DOM树中它的祖先."。相反,调用.parent()向上移动一级并从那里开始。
这里有一个小助手函数,你可以添加到你的项目中,方便重复使用:

// get the first element that matches the selector, excluding itself
$.fn.closestParent = function(selector) {
    return this.parent().closest(selector)
}

然后像这样使用:

$(".js-start-here").closestParent("div")

堆栈代码段中的演示

一个一个二个一个一个一个三个一个一个一个一个一个四个一个

相关问题