Javascript 如何在不使用jQuery或修改Element.prototype的情况下获得DOM树上的多个父级?

Javascript 如何在不使用jQuery或修改Element.prototype的情况下获得DOM树上的多个父级?,javascript,dom,tree-traversal,dom-traversal,Javascript,Dom,Tree Traversal,Dom Traversal,我想知道是否有一种方法可以只使用vanilla JS而不必多次使用parentNode来选择DOM中的特定元素。我知道你可以用jQuery和修改Element.prototype来实现这一点,但是还有其他漂亮的方法来编写它吗 const deleteButtons=document.querySelectorAll'.delete按钮'; 对于var i=0;i.长度;i++{ deleteButtons[i].addEventListener'click',e=>{ e、 防止违约; //这是

我想知道是否有一种方法可以只使用vanilla JS而不必多次使用parentNode来选择DOM中的特定元素。我知道你可以用jQuery和修改Element.prototype来实现这一点,但是还有其他漂亮的方法来编写它吗

const deleteButtons=document.querySelectorAll'.delete按钮'; 对于var i=0;i.长度;i++{ deleteButtons[i].addEventListener'click',e=>{ e、 防止违约; //这是parentNode的疯狂使用量 bookDatabase.child.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttributeid.remove; }; }
实际上只有另一种方法,即使用domapi,但它确实需要提供一个选择器,该选择器可以唯一地标识所需的特定元素,或者从后代的角度标识与该选择器匹配的第一个元素。否则,将需要多次使用.parent方法,并且您需要知道要升级多少级别

//从最内层开始 var start=document.getElementByIdsource; //假设你想引用第一个祖先 //那有什么东西课 start.closest.something3.classList.addred; //或者,第二个最近的 var firstMatch=start.closest.something2; firstMatch.classList.addyellow; //甚至更高 firstMatch.closest.something1.classList.addaqua; //当然,你也可以跳过关卡 start.closest.something1.classList.adddropCap; 来源{背景色:橙色;} .red{背景色:红色;} .yellow{背景色:黄色;字体大小:1rem;} .aqua{背景色:aqua;} .dropCap{字体大小:3em;} 一级 二级 三级 四级 我遇到了同样的问题。。。这对我帮助很大

通过使用,您只需遍历到所需的特定父元素

元素。最近的“.parentClass”-或-element。最近的“parentId”

其中,“element”是案例“e.target”中的原始元素,并且


“parentClass”-或-“parentID”是所需父元素的标识符。

以下是获取所需层次结构级别的父节点的最简单方法:

function getParentNode(element, level=1) { // 1 - default value (if no 'level' parameter is passed to the function)
    while(level-- > 0) {
        element = element.parentNode;
        if(!element) {
            return null; // to avoid a possible "TypeError: Cannot read property 'parentNode' of null" if the requested level is higher than document
        }
    }
    return element;
}
使用此功能,而不是:

e.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode
您可以使用以下选项:

getParentNode(e.target, 6)

您可以使用具有固定迭代次数的for循环,或者尽可能使用id或类名来检索元素。您想要一个函数,该函数接受元素和数字,并在多个级别上返回父元素?这些都是很好的想法,但我应该更清楚,我正在寻找一个现有的方法。谢谢。这就是我要找的。我想我以前见过element.closest,但我假设它是jQuery。很高兴知道。非常感谢。