| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | <!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>  <div id="div1">111111111</div>  <p id="p1">22222222</p>  <ul id="ul1">    <li id="li1">1</li>    <li>2</li>    <li>3</li>  </ul>  <script>    var div1 = document.getElementById('div1')    var p1 = document.getElementById('p1')    var ul1 = document.getElementById('ul1')    /* console.log(div1)    console.log(div1.nodeType)//节点类型    console.log(div1.nextSibling)// 下一个节点    console.log(div1.previousSibling)//上一个节点 */    /*    document是没有nodeValue的:null    元素节点是没有nodeValue的:null    属性节点id的nodeValue:d1    内容节点的nodeValue:hello HTML DOM    */    // console.log(div1.nextElementSibling)//下一个元素节点    // console.log(div1.previousElementSibling)//上一个元素节点    // console.log(div1.nodeName)//节点名称    // console.log(p1.nodeName)    /*     元素节点的 nodeName 与标签名相同    属性节点的 nodeName 与属性名相同    文本节点的 nodeName #text    文档节点的 nodeName #document    */    function next(elem){      do{        elem = elem.nextSibling      } while(elem.nodeType != 1)      return elem    }    console.log(next(p1))    // console.log(ul1.firstChild)    // console.log(ul1.lastChild)    // console.log(ul1.firstElementChild)    function first(elem){      elem = elem.firstChild      if(elem.nodeType != 1){        elem = next(elem)      }       return elem    }    console.log(first(ul1))  </script></body></html>
 |