本文主要介紹如何利用DOM節(jié)點獲取頁面元素,頁面文檔中的所有事物都是節(jié)點:包括元素節(jié)點、文本節(jié)點、屬性節(jié)點、文檔節(jié)點、注釋節(jié)點。下面介紹獲取節(jié)點的兩大類方法: (1)獲取節(jié)點(包含文本節(jié)點、元素節(jié)點等所有節(jié)點) 1.parentNode:獲取父節(jié)點 2.childNodes:獲取子節(jié)點,通過索引值獲取各個子節(jié)點 3.firstChild:獲取父節(jié)點的第一個子節(jié)點 4.lastChild:獲取父節(jié)點的最后一個子節(jié)點 5.nextSibling:獲取子節(jié)點相鄰的下一個兄弟節(jié)點 6.previousSibling:獲取子節(jié)點相鄰的前一個兄弟節(jié)點 7.attributes:獲取屬性節(jié)點 (2)獲取元素節(jié)點 1.parentElement:獲取父元素節(jié)點 2.children:獲取子元素節(jié)點,通過索引值獲取各個子元素節(jié)點 3.firstElementChild:獲取父級的第一個子元素節(jié)點 4.lastElementChild:獲取父級的最后一個子元素節(jié)點 5.nextElementSibling:獲取相鄰的下一個兄弟元素節(jié)點 6.previousElementSibling:獲取相鄰的前一個兄弟元素節(jié)點
<!DOCTYPE html> <html> <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>由節(jié)點關(guān)系獲取元素</title> <style> </style> </head> <body> <div name="div1"> <p name='p1'>文本節(jié)點</p> <p>2</p> <ul> <li>3</li> <li id="li4">4</li> <li>5</li> <li>6</li> </ul> </div> <section>7</section> <main><span>8</span><i>9</i></main> <script> //注意換行和空格也屬于結(jié)點,屬于文本節(jié)點,按節(jié)點關(guān)系訪問時需要考慮。屬性節(jié)點無須考慮。 //1. parentNode獲取div console.log(document.querySelector('p').parentNode); console.log(document.querySelector('p').parentNode.attributes[0]); console.log(document.querySelector('p').parentNode.nodeName); //DIV console.log(document.querySelector('p').parentNode.nodeValue); //null console.log(document.querySelector('p').parentNode.nodeType); //1 元素節(jié)點 // 2.通過childNodes獲取第一個p console.log(document.querySelector('div').childNodes[1]); console.log(document.querySelector('div').childNodes[1].firstChild.nodeName); console.log(document.querySelector('div').childNodes[1].firstChild.nodeType); //2 文本節(jié)點 console.log(document.querySelector('div').childNodes[1].firstChild.nodeValue); // 3.firstChild獲取main中的第一個子節(jié)點 console.log(document.querySelector('main').firstChild); // 4.lastChild獲取main中的最后一個子節(jié)點 console.log(document.querySelector('main').lastChild); // 5.nextSibling獲取相鄰下一個兄弟元素 console.log(document.querySelector('#li4').nextSibling.nextSibling); // 6.previousSibling獲取相鄰上一個兄弟元素 console.log(document.querySelector('#li4').previousSibling.previousSibling); // 總結(jié):除parentNode外,其他方法謹(jǐn)慎選擇,一旦代碼格式有變,就會出現(xiàn)錯誤 // 通過nodeName獲取節(jié)點名稱 //通過nodeValue獲取節(jié)點值 // 通過nodeType返回節(jié)點類型 </script> </body> </html>
<!DOCTYPE html> <html> <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>獲取子元素節(jié)點</title> </head> <body> <div> <p>123</p> <p>456</p> <p>789</p> </div> <script> //p標(biāo)簽總體算一個節(jié)點,內(nèi)部的“123”不算 console.log(document.querySelector('div').childNodes); console.log(document.querySelector('div').childNodes.length); // 獲取子元素節(jié)點 console.log(document.querySelector('div').children); console.log(document.querySelector('div').children[1]); console.log(document.querySelector('div').firstElementChild); console.log(document.querySelector('div').firstElementChild.nextElementSibling); console.log(document.querySelector('div').lastElementChild); console.log(document.querySelector('div').lastElementChild.previousElementSibling); console.log(document.querySelector('div').children[1].parentElement); </script> </body> </html>