Javascript 父节点计数

Javascript 父节点计数,javascript,ecmascript-5,Javascript,Ecmascript 5,ECMAScript中是否有DOM元素的本机方法,允许对给定元素的所有祖先进行计数,直到由Id、名称等指定的窗口对象或DOM元素 示例用途是检查给定元素的所有祖先并删除指定属性。有一个节点迭代器可用于此目的。我编写了一个简单函数,用于执行问题中描述的操作。它获取给定元素的所有祖先,并从起始元素和结束元素之间的每个元素中删除给定属性。它不会对结束元素执行removeAttribute方法 var modifyAncestors = function(startingelementid,end

ECMAScript中是否有DOM元素的本机方法,允许对给定元素的所有祖先进行计数,直到由Id、名称等指定的窗口对象或DOM元素


示例用途是检查给定元素的所有祖先并删除指定属性。

有一个节点迭代器可用于此目的。

我编写了一个简单函数,用于执行问题中描述的操作。它获取给定元素的所有祖先,并从起始元素和结束元素之间的每个元素中删除给定属性。它不会对结束元素执行removeAttribute方法

   var modifyAncestors = function(startingelementid,endingelementId,searchedattribute) {
        var nodecount = document.getElementById(endingelementId).childNodes.length;
        console.log(nodecount);
        var currentid = startingelementid;
        console.log(currentid);
        console.log(searchedattribute); 
        for(var i = 0; i < nodecount; i++) {
            if(currentid == endingelementId) {
            break;
            }
            else {
            document.getElementById(currentid).removeAttribute(searchedattribute);
            currentid = document.getElementById(currentid).parentNode.id;   
            }
        }               
    }
工作示例:无法使其与Fiddle JS一起工作

如有任何评论、错误等,我们将不胜感激。

您可以使用xpath:

document.evaluate('ancestor::*', x, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null)

有关更多详细信息,请参阅。

不,您必须自己编写;jQuery有一个.parents或.parentsUntil方法用于此。不要混淆父级和父级。好的。谢谢你的提示。这不是一个直接的内置函数,但是如果你拥有一个DOM节点,你就可以访问parentElement属性了。然后你可以递归地去。类似于var node=document.getElementByIdmyId;然后当节点null{node=node.parentNode}将使您到达顶部窗口对象不是DOM元素。也许你指的是html元素。对不起,我要求的是本机Javascript解决方案。我不知道你所说的本机Javascript解决方案是什么意思。document.createNodeIterator只是与element.parentNode类似的另一个DOM API。不必保留ID,然后在每次查找时命中DOM。诚然,这不是一个巨大的命中率,但仍然可以保留节点并在节点运行时执行!=null&&node.id!==targetId{/*您的节点操作*/node=node.parentNode;}呃,是的-根据我对您的问题的评论进行了修改。在我发表评论时,我没有看到你发布的答案。事实上,经过再三思考——我所说的可能是错误的——你正朝着另一个方向走——孩子而不是父母。我的错是,我把它归咎于没有足够的咖啡因。不过,我确实认为我的方法稍微好一点。同样的原则也适用于此-您只需遍历DOM going currentNode=childNodes[i],而不是按ID查找每个子节点。它还解决了可能没有所有节点的ID的问题。我知道这个问题,但没有时间实际修改该解决方案。谢谢你的提示,我肯定会使用它。据我所知,这个正确的解决方案根本不起作用。除了错误的假设,所有DOM节点都有ID,以及混合查找祖先元素并对它们执行某种动作的不良设计,考虑结束元素只有一个子的情况。循环将在一次迭代后终止,即使尚未到达结束元素。在结束元素上查询childNodes.length并在其上循环有什么意义?