DOM遍历

DOM遍历,其实就是"查找元素"的意思
如 使用getElementById() 等方法获取一个元素,然后又想得到这个元素的父元素,子元素 甚至是下一个兄弟元素,这就是DOM遍历

JavaScript中,DOM遍历,分三种情况
查找父元素
查找子元素
查找兄弟元素


查找父元素

语法: obj.parentNode
obj是一个DOM对象,指的是使用getElementById() getElementsByTagName()等方法获取的元素

 

 

在下面这个例子中,需要实现的效果是,随便点击一个单元格时,就会为该单元格所在的行设置样式,也就是说要找到当前td元素的父元素tr
如果使用querySeletor() 和 querySelectorAll() 是没办法实现的
何时用类数组,何时不用类数组 ,记住:凡是单数的就不用,例如parentNode只有一个,就无需类数组

  <style>
    table {
      border-collapse: collapse;
    }

    table,
    tr,
    td {
      border: solid red 1px;
    }
  </style>


    window.onload = function () {
      var oTd = document.getElementsByTagName("td");
      //遍历每一个td
      for (var i = 0; i < oTd.length; i++) {
        //为每一个td添加点击事件
        oTd[i].onclick = function () {
          //获得当前td的父元素 tr
          var oParent = this.parentNode;
          //为当前父元素添加样式
          oParent.style.backgroundColor = "orange";
        }
      }
    }

  <table>
    <caption>成绩表</caption>
    <tr>
      <td>小米</td>
      <td>60</td>
      <td>60</td>
      <td>60</td>
    </tr>
    <tr>
      <td>明明</td>
      <td>80</td>
      <td>80</td>
      <td>80</td>
    </tr>
    <tr>
      <td>艳艳</td>
      <td>90</td>
      <td>90</td>
      <td>90</td>
    </tr>
  </table>

 

 

 


查找子元素
可以使用下面两组方式来获得父元素中的所有子元素或某个子元素

childNodes  firstChild   lastChild               
children   firstElementChild   lastElementChild

childNodes 获取所有的子节点, 包括元素节点以及文本节点
children   获取所有的元素节点,但不包括文本节点

 

 


childNodes 与 childred的比较
childNodes.length 获取的是子节点的长度 ,含元素节点和文本节点,
如下面例子3个元素节点和4个文本节点,li元素之间每一次换行都是一个空白节点,javascript会把这些空白节点当做文本节点来处理

children.length 获取元素节点的长度,如例子结果是3

    window.onload = function () {
      var oUl = document.getElementById("list");
      var childNodesLen = oUl.childNodes.length;
      var childrenLen = oUl.children.length;
      alert("childNodes的长度为" + childNodesLen + "\n" +
        "children的长度:" + childrenLen);
    }


  <ul id="list">
    <li>HTML</li>
    <li>CSS</li>
    <li>jQuery</li>
  </ul>

 

 



 <script>
    //下面这种写法点击删除键,要点2次才能删除一个li
    //因为两个元素之间的换行空格 也是一个文本节点
    //所以第一次点击是删除文本节点,第二次点击删除是才是li元素
    //解决方法,将li元素间的空格去掉 或使用nodeType来判断
    window.onload = function () {
      var oBtn = document.getElementById("btn");
      var oUl = document.getElementById("list");
      oBtn.onclick = function () {
        oUl.removeChild(oUl.lastChild);
      }
    }

    //使用nodeType来判断
    window.onload = function () {
      var oBtn = document.getElementById("btn");
      var oUl = document.getElementById("list");
      oBtn.onclick = function () {
        //如果oUl.lastChild.nodeType == 3 ,那执行removeChild()两次
        //第一次删除空白节点,第二次删除元素
        //如果oUl.lastChild.nodeType 的值不为3,则执行removeChild()一次
        if (oUl.lastChild.nodeType == 3) {
          oUl.removeChild(oUl.lastChild);
          oUl.removeChild(oUl.lastChild);
        } else {
          oUl.removeChild(oUl.lastChild);
        }
      }
    }

    //将li元素间的空格去掉 直接使用 oUl.removeChild(oUl.lastElementChild);
    //lastElementChild 获取最后一个子元素节点
    //firstElementChild 获取第一个子元素节点
    //如获取任意一个子元素节点,可以使用children[i]
    window.onload = function () {
      var oBtn = document.getElementById("btn");
      var oUl = document.getElementById("list");
      oBtn.onclick = function () {
        oUl.removeChild(oUl.lastElementChild);
      }
    }
  </script>


  <ul id="list">
    <li>HTML</li>
    <li>CSS</li>
    <li>jQuery</li>
  </ul>
  <input id="btn" type="button" value="删除" />

查找兄弟元素
可以使用下面两组方式来获取得兄弟元素

    previousSibling   //查找前一个兄弟节点
    nextSibling       //查找后一个兄弟节点
    //以上方式,查出来的可能是文本节点(一般是空白节点)

    //以下方式,只操作元素节点 建议使用
    previousElementSibling   //查找前一个兄弟元素节点
    nextElementSibling       //查找后一个兄弟元素节点

 

    window.onload = function () {
      var oUl = document.getElementById("list");
      var oBtn = document.getElementById("btn");
      oBtn.onclick = function () {
      //把第三个列表项前一个兄弟元素删除
        var preElement = oUl.children[2].previousElementSibling;
        oUl.removeChild(preElement);
      };
    }

  <ul id="list">
    <li>HTML</li>
    <li>CSS</li>
    <li>JavaScript</li>
    <li>jQuery</li>
  </ul>
  <input id="btn" type="button" value="删除" />

 

 































 

 

 

posted @ 2020-12-23 16:15  沁莹  阅读(441)  评论(0)    收藏  举报