JavaScript之DOM_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
由于HTML文檔被瀏覽器解析后就是一棵DOM樹,要改變HTML的結(jié)構(gòu),就需要通過JavaScript來操作DOM。
始終記住DOM是一個(gè)樹形結(jié)構(gòu)。操作一個(gè)DOM節(jié)點(diǎn)實(shí)際上就是這么幾個(gè)操作:
- 更新:更新該DOM節(jié)點(diǎn)的內(nèi)容,相當(dāng)于更新了該DOM節(jié)點(diǎn)表示的HTML的內(nèi)容;
- 遍歷:遍歷該DOM節(jié)點(diǎn)下的子節(jié)點(diǎn),以便進(jìn)行進(jìn)一步操作;
- 添加:在該DOM節(jié)點(diǎn)下新增一個(gè)子節(jié)點(diǎn),相當(dāng)于動(dòng)態(tài)增加了一個(gè)HTML節(jié)點(diǎn);
- 刪除:將該節(jié)點(diǎn)從HTML中刪除,相當(dāng)于刪掉了該DOM節(jié)點(diǎn)的內(nèi)容以及它包含的所有子節(jié)點(diǎn)。
在操作一個(gè)DOM節(jié)點(diǎn)前,我們需要通過各種方式先拿到這個(gè)DOM節(jié)點(diǎn)。最常用的方法是document.getElementById()
和document.getElementsByTagName()
,以及CSS選擇器document.getElementsByClassName()
。
由于ID在HTML文檔中是唯一的,所以document.getElementById()
可以直接定位唯一的一個(gè)DOM節(jié)點(diǎn)。
document.getElementsByTagName()
和document.getElementsByClassName()
總是返回一組DOM節(jié)點(diǎn)。要精確地選擇DOM,可以先定位父節(jié)點(diǎn),再?gòu)母腹?jié)點(diǎn)開始選擇,以縮小范圍。
例如:
// 返回ID為'test'的節(jié)點(diǎn): var test = document.getElementById('test'); // 先定位ID為'test-table'的節(jié)點(diǎn),再返回其內(nèi)部所有tr節(jié)點(diǎn): var trs = document.getElementById('test-table').getElementsByTagName('tr'); // 先定位ID為'test-div'的節(jié)點(diǎn),再返回其內(nèi)部所有class包含red的節(jié)點(diǎn): var reds = document.getElementById('test-div').getElementsByClassName('red'); // 獲取節(jié)點(diǎn)test下的所有直屬子節(jié)點(diǎn): var cs = test.children; // 獲取節(jié)點(diǎn)test下第一個(gè)、最后一個(gè)子節(jié)點(diǎn): var first = test.firstElementChild; var last = test.lastElementChild;
第二種方法是使用querySelector()
和querySelectorAll()
,需要了解selector語法,然后使用條件來獲取節(jié)點(diǎn),更加方便:
// 通過querySelector獲取ID為q1的節(jié)點(diǎn): var q1 = document.querySelector('#q1'); // 通過querySelectorAll獲取q1節(jié)點(diǎn)內(nèi)的符合條件的所有節(jié)點(diǎn): var ps = q1.querySelectorAll('div.highlighted > p');
注意:低版本的IE<8不支持querySelector
和querySelectorAll
。IE8僅有限支持。
嚴(yán)格地講,我們這里的DOM節(jié)點(diǎn)是指Element
,但是DOM節(jié)點(diǎn)實(shí)際上是Node
,在HTML中,Node
包括Element
、Comment
、CDATA_SECTION
等很多種,以及根節(jié)點(diǎn)Document
類型,但是,絕大多數(shù)時(shí)候我們只關(guān)心Element
,也就是實(shí)際控制頁面結(jié)構(gòu)的Node
,其他類型的Node
忽略即可。根節(jié)點(diǎn)Document
已經(jīng)自動(dòng)綁定為全局變量document
。
練習(xí)
如下的HTML結(jié)構(gòu):
JavaScript
Java
Python
Ruby
Swift
Scheme
Haskell
<!-- HTML結(jié)構(gòu) --> <div id="test-div"> <div class="c-red"> <p id="test-p">JavaScript</p> <p>Java</p> </div> <div class="c-red c-green"> <p>Python</p> <p>Ruby</p> <p>Swift</p> </div> <div class="c-green"> <p>Scheme</p> <p>Haskell</p> </div> </div>
請(qǐng)選擇出指定條件的節(jié)點(diǎn):
// 選擇<p>JavaScript</p>: var js = ???; // 選擇<p>Python</p>,<p>Ruby</p>,<p>Swift</p>: var arr = ???; // 選擇<p>Haskell</p>: var haskell = ???;
相關(guān)文章
ElementUI 的 Tree 組件的基本使用實(shí)戰(zhàn)教程
這篇文章主要介紹了ElementUI 的 Tree 組件的基本使用實(shí)戰(zhàn)教程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例
這篇文章主要介紹了微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07基于javascript實(shí)現(xiàn)九宮格大轉(zhuǎn)盤效果
這篇文章主要為大家詳細(xì)介紹了基于javascript實(shí)現(xiàn)九宮格大轉(zhuǎn)盤效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03.NET微信公眾號(hào)開發(fā)之創(chuàng)建自定義菜單
這篇文章主要介紹了.NET微信公眾號(hào)開發(fā)之創(chuàng)建自定義菜單的相關(guān)資料,需要的朋友可以參考下2015-07-07JS基于面向?qū)ο髮?shí)現(xiàn)的拖拽庫實(shí)例
這篇文章主要介紹了JS基于面向?qū)ο髮?shí)現(xiàn)的拖拽庫,以實(shí)例形式分析了JavaScript設(shè)置水平、垂直拖拽及限制拖拽范圍的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09javascript實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)移動(dòng)端觸屏拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07???????Rxjs?map,?mergeMap?和?switchMap?的區(qū)別與聯(lián)系
這篇文章主要介紹了???????Rxjs?map,mergeMap和switchMap的區(qū)別與聯(lián)系,map、mergeMap和switchMap是RxJS中的三個(gè)主要運(yùn)算符,在SAP?Spartacus開發(fā)中有著廣泛的使用場(chǎng)景2022-07-07JavaScript設(shè)計(jì)模式之門面模式原理與實(shí)現(xiàn)方法分析
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之門面模式原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了門面模式的原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03