编写函数,获取dom里面某一个节点的所有兄弟节点nextSibling和previousSibling

77 阅读1分钟
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <ul>
      <li>
        <a href="#">a1</a><a href="#">a2</a><a href="#">a3</a><a href="#">a4</a
        ><a href="#">a5</a>
      </li>
      <li>
        <a href="#">a1</a><a href="#">a2</a><a href="#">a3</a><a href="#">a4</a
        ><a href="#">a5</a>
      </li>
      <li>
        <a href="#">a1</a><a href="#">a2</a><a href="#">a3</a><a href="#">a4</a
        ><a href="#">a5</a>
      </li>
      <li>
        <a href="#">a1</a><a href="#">a2</a><a href="#" id="a3">a3</a
        ><a href="#">a4</a><a href="#">a5</a>
      </li>
      <li>
        <a href="#">a1</a><a href="#">a2</a><a href="#">a3</a><a href="#">a4</a
        ><a href="#">a5</a>
      </li>
    </ul>
  </body>

  <script>
    // 先找到一个节点
    var a3 = document.getElementById("a3");
    //
    // console.log(a3);

    // 开始定义函数,里面传一个element作为参数
    function getSiblings(element) {
      // 所有节点
      var resultNode = [];
      // 所有的哥哥
      var previousNode = [];
      // 所有弟弟
      var nextNode = [];
      // 找弟弟
      //   定义函数的时候,里面有一个参数element,这个参数在下面的不同的while被用到,所以先定义一个变量接收element
      var tmp = element;
      // 只要能找到弟弟,就会一直执行while,
      while (tmp.nextElementSibling) {
        // 找到了弟弟,就把找到的弟弟添加到弟弟这个数组里面
        nextNode.push(tmp.nextElementSibling);
        // 找到以后,就把下一个节点赋值给他,更新一下节点,继续找,
        // 直到找完所有的弟弟才会结束while
        tmp = tmp.nextElementSibling;
      }
      // 现在这个while里面就找到了所有的弟弟
      //   经过了这个while循环,里面的element这个参数已经是最后一个节点
      //   打印之前,要确保定义的函数已经在调用
      //   console.log(nextNode);

      //   开始定义函数找所有的哥哥
      tmp =
        element; /* 把一开始的element继续赋值给tmp,就可以接着用这个element */
      while (tmp.previousElementSibling) {
        // 找到了哥哥,就把找到的弟弟哥哥添加到定义好的哥哥这个数组里面
        // 以为是一直往上找,所以这里用unshift
        previousNode.unshift(tmp.previousElementSibling);
        // 找到以后,就把上一个节点赋值给他,更新一上节点,继续找,
        // 直到找完所有的弟弟哥哥才会结束while
        tmp = tmp.previousElementSibling;
      }
      //   console.log(previousNode);
      //   把找到的哥哥和弟弟两个数组合并(.concat)
      resultNode = previousNode.concat(nextNode);
      //   执行完函数,在函数里面返回return
      return resultNode;
    }
    //   函数定义好了,需要调用,不然基于这个函数的打印没法实现
    console.log(getSiblings(a3));
  </script>
</html>