js原生递归获取一个节点的所有父级节点

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div class="a">
      一级
      <div class="b">
        二级
        <div class="c">
          三级
          <div id="start" class="">
            目标
          </div>
        </div>
      </div>
    </div>
  </body>
  <script type="text/javascript">

    let startTag = document.querySelector('#start')

    /**
     * getParentTag - 获取传入标签的所有父级标签
     *
     * @param  { HTMLElement } startTag 初始dom节点
     * @param  {Array} parentTagList 初始dom节点的所有父级节点
     * @return {type} 递归/初始dom节点的所有父级节点
     */
    function getParentTag(startTag, parentTagList = []) {
      // 传入标签是否是DOM对象
      if (!(startTag instanceof HTMLElement)) return console.error('receive only HTMLElement');
      // 父级标签是否是body,是着停止返回集合,反之继续
      if ('BODY' !== startTag.parentElement.nodeName) {
        // 放入集合
        parentTagList.push(startTag.parentElement)
        // 再上一层寻找
        return getParentTag(startTag.parentElement, parentTagList)
      }
      // 返回集合,结束
      else return parentTagList;

    }

    console.log(getParentTag(startTag));
  </script>
</html>

原文地址:https://segmentfault.com/a/1190000017162973?utm_source=tag-newest

猜你喜欢

转载自blog.csdn.net/qq_17497931/article/details/84575215