signed

QiShunwang

“诚信为本、客户至上”

js查找父节点的简单方法

2021/5/15 0:55:29   来源:
<div>
        <a href="#">标题</a>
        <ul id="demo">
            <li><a href="#" onclick="selectThisItem(this)">项目一</a></li>
                <ul>
                    <li><a href="#" onclick="selectThisItem(this)">子类一</a></li>
                    <li><a href="#" onclick="selectThisItem(this)">子类二</a></li>
                </ul>
            <li><a href="#" onclick="selectThisItem(this)">项目一</a></li>
            <li><a href="#" onclick="selectThisItem(this)">项目</a></li>
        </ul>
</div>
上面的代码中,在点击项目或子类时,因为触发的事件一样,参数也一样,能区别用户点击的到底是“项目x”还是“子类x”,除了this.innerHTML来判断它们的内在文字外,还可以根据它们在以<ul id="demo">元素为根节点的xml文档中的纵向位置(节点深度)来区别,比如“项目一”在<ul id="demo">中的节点深度是2,“子类一”的节点深度是4.

计算节点深度在排除递归方法后,找到了一个更为简单的方法:

function parentIndexOf(node,parent){
    if(node==parent){return 0;}
    for (var i=0,n=node; n=n.parentNode; i++){
        if(n==parent){return i;}
        if(n==document.documentElement){return -1;} //找不到目标父节点,防止死循环
    }
}
函数的返回值是索引数字,如果入口节点与查找的父节点相同(即同一个元素),返回值为0,向上循环找到父节点后返回向上查找的节点级数,如果向上查找,到了整个页面的根节点,比如是<html>,还找不到,就返回-1,并结束循环。

返回值与String对象内置的indexOf方法相似。函数的关键是for的第二个参数n=n.parentNode,感觉比较巧妙。

您可能感兴趣的文章:
  • JS 使用for循环遍历子节点查找元素
  • javascript下查找父节点的简单方法
  • js查找节点的方法小结
  • JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
  • javascript基础之查找元素的详细介绍(访问节点)
  • js遍历子节点子元素附属性及方法
  • javascript 节点遍历函数
  • JS获取子节点、父节点和兄弟节点的方法实例总结
  • javascript获取网页中指定节点的父节点、子节点的方法小结
  • javascript得到XML某节点的子节点个数的脚本
  • JS查找孩子节点简单示例