由于HTML文檔被瀏覽器解析后就是一棵DOM樹,要改變HTML的結構,就需要通過JavaScript來操作DOM。
始終記住DOM是一個樹形結構。操作一個DOM節點實際上就是這么幾個操作:
在操作一個DOM節點前,我們需要通過各種方式先拿到這個DOM節點。最常用的方法是document.getElementById()和document.getElementsByTagName(),以及CSS選擇器document.getElementsByClassName() 。
由于ID在HTML文檔中是唯一的,所以document.getElementById()可以直接定位唯一的一個DOM節點。
document.getElementsByTagName()和document.getElementsByClassName()總是返回一組DOM節點。要精確地選擇DOM,可以先定位父節點,再從父節點開始選擇,以縮小范圍。
例如:
// 返回ID為'test'的節點:var test = document.getElementById('test');// 先定位ID為'test-table'的節點,再返回其內部所有tr節點:var trs = document.getElementById('test-table').getElementsByTagName('tr');// 先定位ID為'test-div'的節點,再返回其內部所有class包含red的節點:var reds = document.getElementById('test-div').getElementsByClassName('red');// 獲取節點test下的所有直屬子節點:var cs = test.children;// 獲取節點test下第一個、最后一個子節點:var first = test.firstElementChild;var last = test.lastElementChild;第二種方法是使用querySelector()和querySelectorAll(),需要了解selector語法,然后使用條件來獲取節點,更加方便:
// 通過querySelector獲取ID為q1的節點:var q1 = document.querySelector('#q1');// 通過querySelectorAll獲取q1節點內的符合條件的所有節點:var ps = q1.querySelectorAll('div.highlighted > p');注意:低版本的IE<8不支持querySelector和querySelectorAll。IE8僅有限支持。
嚴格地講,我們這里的DOM節點是指Element,但是DOM節點實際上是Node,在HTML中,Node包括Element、Comment、CDATA_SECTION等很多種,以及根節點Document類型,但是,絕大多數時候我們只關心Element,也就是實際控制頁面結構的Node,其他類型的Node忽略即可。根節點Document已經自動綁定為全局變量document。
練習
新聞熱點
疑難解答
圖片精選