首先如果使用DOM模型蹄葱,需要將整個(gè)的script寫在body的后面锄列,保證整個(gè)DOM模型完整生成之后,再獲取對(duì)應(yīng)的元素
id ?表示DOM中的某個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí)竣况,該標(biāo)識(shí)樂(lè)意幫助我們快速獲取DOM中的某個(gè)指定節(jié)點(diǎn),因其唯一性筒严,所以得到的節(jié)點(diǎn)也是唯一的丹泉,故在文檔中不適合多個(gè)標(biāo)簽使用同一個(gè)id
通過(guò)標(biāo)簽名來(lái)獲取對(duì)應(yīng)的標(biāo)簽,通過(guò)此方法返回的結(jié)果是以HTMLCollection來(lái)保存的鸭蛙。
HTMLColloction是偽數(shù)組摹恨,沒(méi)有數(shù)組的push,pop娶视,但是依然有下標(biāo)的概念晒哄,下標(biāo)的范圍(0~長(zhǎng)度~1),有l(wèi)ength屬性肪获,可以明確保存的元素個(gè)數(shù)
例如:得到body里面的ol中的li元素
var lis = document.getElementByTagName("li");
console.log(lis).
通過(guò)childNodes屬性可以獲取節(jié)點(diǎn)的子節(jié)點(diǎn)寝凌,一直要到葉子節(jié)點(diǎn),如果子節(jié)點(diǎn)之間有回車換行硫兰,回車會(huì)被當(dāng)做一個(gè)text節(jié)點(diǎn),如果要用childNodes屬性獲取正確節(jié)點(diǎn)寒锚,則不能使用換行
console.log(list.childNodes);
console.log(list.firstChildNode);
console.log(list.lastChildNode);
獲取指定節(jié)點(diǎn)的父節(jié)點(diǎn)
console.log(list.parentNode);
在某一個(gè)已經(jīng)存在的子節(jié)點(diǎn)前插入一個(gè)新的子節(jié)點(diǎn)
var div = document.createElement("div");
div.style.width = "200px";
div.style.height = "200px";
div.style.background = "red";
在某一個(gè)節(jié)點(diǎn)下插入一個(gè)新的節(jié)點(diǎn):
ininsertBerfore有兩個(gè)參數(shù)劫映,第一個(gè)是新元素违孝,第二個(gè)是已經(jīng)存在的元素(中間是逗號(hào)隔開,而不是句號(hào))
list.parentNode.insertBefore(div,list);
已經(jīng)存在的兩個(gè)子節(jié)點(diǎn)可以通過(guò)此方法來(lái)交換順序
list.parentNode.insertBefore(list,div);
替換已有的子節(jié)點(diǎn)泳赋,拿第一個(gè)參數(shù)元素去替換第二個(gè)參數(shù)元素
list.replaceChild(lis[0],lis[3]);
刪除已有的節(jié)點(diǎn)
list.removeChild(lis[0]);
復(fù)制子節(jié)點(diǎn)雌桑,cloneNode()的參數(shù)是boolean類型的
true:復(fù)制節(jié)點(diǎn)及其子節(jié)點(diǎn)(如果存在節(jié)點(diǎn))
復(fù)制節(jié)點(diǎn)及其子節(jié)點(diǎn)的文本內(nèi)容(如果存在內(nèi)容)
false:只復(fù)制當(dāng)前節(jié)點(diǎn)本身,不包含子節(jié)點(diǎn)及其文本內(nèi)容
獲取節(jié)點(diǎn)的另一種屬性:
children屬性得到的只是子節(jié)點(diǎn)元素祖今,不包括回車和空格等字符校坑,但是在IE9瀏覽器上回包含代碼注釋,IE9會(huì)把代碼注釋也當(dāng)做一個(gè)子節(jié)點(diǎn)千诬。
console.log(list.children);
list.setAttribute("index" , 121);
獲取已知節(jié)點(diǎn)的屬性值
console.log(list.getAttribute("index"));