JavaScript之DOM_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
由于HTML文檔被瀏覽器解析后就是一棵DOM樹(shù),要改變HTML的結(jié)構(gòu),就需要通過(guò)JavaScript來(lái)操作DOM。
始終記住DOM是一個(gè)樹(shù)形結(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)前,我們需要通過(guò)各種方式先拿到這個(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)開(kāi)始選擇,以縮小范圍。
例如:
// 返回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語(yǔ)法,然后使用條件來(lái)獲取節(jié)點(diǎn),更加方便:
// 通過(guò)querySelector獲取ID為q1的節(jié)點(diǎn):
var q1 = document.querySelector('#q1');
// 通過(guò)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類(lèi)型,但是,絕大多數(shù)時(shí)候我們只關(guān)心Element,也就是實(shí)際控制頁(yè)面結(jié)構(gòu)的Node,其他類(lèi)型的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)文章
小程序掃描普通鏈接二維碼跳轉(zhuǎn)小程序指定界面方法
這篇文章主要介紹了小程序掃描普通鏈接二維碼跳轉(zhuǎn)小程序指定界面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
所見(jiàn)即所得的富文本編輯器bootstrap-wysiwyg使用方法詳解
這篇文章主要為大家分享一款所見(jiàn)即所得的富文本編輯器bootstrap-wysiwyg,并詳細(xì)告訴大家文本編輯器bootstrap-wysiwyg的使用方法,感興趣的小伙伴們可以參考一下2016-05-05
javaScript實(shí)現(xiàn)滾動(dòng)新聞的方法
這篇文章主要介紹了javaScript實(shí)現(xiàn)滾動(dòng)新聞的方法,涉及javascript實(shí)現(xiàn)頁(yè)面滾動(dòng)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
javascript實(shí)現(xiàn)仿銀行密碼輸入框效果的代碼
這篇文章通過(guò)實(shí)例代碼給大家介紹了javascript實(shí)現(xiàn)仿銀行密碼輸入框效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2007-12-12
JS如何實(shí)現(xiàn)手機(jī)端輸入驗(yàn)證碼效果
這篇文章主要介紹了JS如何實(shí)現(xiàn)手機(jī)端輸入驗(yàn)證碼效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

