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