1. 程式人生 > 其它 >DOM(文件物件模型)+操作DOM

DOM(文件物件模型)+操作DOM

DOM元素

DOM:document object model 文件物件模型
    一整套操作文件流的屬性和方法,其實就是操作頁面的元素在瀏覽器中DOM是樹狀結構

DOM元素的獲取

	非常規標籤獲取(html,head,body)
		document.documentElement
            拿到當前頁面的html標籤
		document.head
            獲取當前頁面的head標籤
		document.body
            獲取當前頁面的body標籤
	常規標籤的獲取(div,ul,li,input)
		document.getElementById(' box ')
            如果有名為box的id,獲取id名為box的元素的第一個
            如果沒有名為box的id,返回null
		document.getElementsByClassName('class名稱')
            在整個文件流裡面通過元素的類名獲取元素
            返回一個為陣列,包含所有該類名的元素,沒有就返回一個空為陣列
		document.getELementsByTagName('標籤名')
            在整個文件流裡面通過元素的標籤名獲取元素
            返回一個為陣列,包含所有該標籤名的元素,沒有就返回一個空為陣列
		documen.querySelector('選擇器')
            選擇器:css中的選擇器
            在文件流中通過選擇器來進行元素的獲取
            返回值:頁面中有與該選擇器相匹配的元素,就是匹配到的元素,如果沒有就返回null
		documen.querySelectorAll('選擇器')
            在文件流中通過選擇器來進行元素的獲取
            返回一個為陣列,包含所有該選擇器匹配的元素,沒有就返回一個空為陣列
		注意:querySelector 和 querySelector IE低版本不支援

DOM操作元素內容

1,innerHTML
    操作元素內部的所有元素
    讀:元素.innerHTML
        獲取元素內部的所有內容(文字+標籤),以字串形式返回
    寫:元素.innerHTML="你要設定的內容"
        設定元素內部的超文字內容
        當字串裡出現html結構時,瀏覽器會自動解析後在頁面顯示
2,innerText
    操作元素的文字內容
    讀:元素.innerText
        獲取元素內部所有的文字內容,不獲取標籤
    寫:元素.innerText="你要設定的文字內容"
        覆蓋式寫入文字內容,當字串中有html結構時,不會被瀏覽器解析,而是當作文字輸出

DOM操作元素的屬性

操作原生屬性(src,type,id)
    讀:元素.屬性名
        獲取元素的屬性值
    寫:元素.屬性名=“值”
        設定元素該屬性的屬性值

操作自定義屬性

    元素.setAttribute('屬性名',‘屬性值’)
        設定元素的自定義屬性
    元素.getAttribute('屬性名')
        獲取元素的一個自定義屬性的屬性值
    元素.removeAttribute('屬性名')
        刪除元素的一個自定義屬性

DOM操作元素類名

1,按原生屬性操作
    div.className='box'--設定類名
    div.className='box1'--修改類名
    div.className+=' abd'--追加類名abc
    刪除元素類名
        1,擷取字串方式
        2,按照空格切開,迴圈遍歷,找到想刪的刪掉
        3,重寫一遍類名,去掉想刪的類名
2,H5 方式操作類名
    div.classList.add('box3')---追加類名box3
    div.classList.remove('box1')---刪除類名box1
    div.toggle('box2')---切換類名狀態
    當元素有這個類名的時候,就是刪除操作
    當元素沒有這個類名的時候,就是追加操作

DOM操作元素樣式

獲取元素樣式
    獲取行內樣式(利用style是元素的原生屬性)
        元素.style
            只能獲取到行內樣式
            獲得一個物件,需要哪個樣式的值直接在物件裡訪問
    獲取非行內樣式
        標準瀏覽器:window.getComputedStyle('元素')---獲得一個物件,裡面包含該元素的所有屬性值,未設定的有預設值,需要哪個樣式直接在物件裡訪問
        IE 低版本瀏覽器:元素.currentStyle---得到的是一個物件,裡面包含的是所有可設定樣式,每一個樣式都有值,沒有設定的有預設值。你需要哪個樣式,直接在物件裡面查詢就行
        說明:當獲取樣式的時候,如果使用點語法,你獲取帶有中劃線的樣式要轉化成駝峰的方式;如果是陣列關聯語法,可以使用中劃線

擴充套件:短路表示式

什麼情況下用短路表示式:方法或屬性執行沒問題,就是拿不到值的時候
前提:程式碼執行不能報錯
設定元素樣式
    JS只能設定行內樣式(因為修改非行內樣式需要修改html和css檔案,JS不能操作電腦檔案)
    元素.style.樣式名=‘值’

DOM節點操作

獲取節點根據關係

		1,childNodes
			div.childNodes---獲取div元素的所有孩子節點
		2,children
			div.children---獲取div元素的所有孩子元素節點
		3,firstChild
			div.firstChild---獲取div的第一個孩子節點
		4,firstElementChild
			div.fistElementChild---獲取div元素的第一個孩子元素節點
		5,lastChild
			div.lastchild---獲取div元素的最後一個節點
		6,lastElementChild
			div.lastElementChild---獲取div元素的最後一個元素節點
		7,previousSlibling
			div.previousSilbing---獲取div元素的前一個兄弟節點
		8,previousElementSlbling
			div.previousElementsSilbing---獲取div元素的前一個元素節點
		9,nextSibling
			div.nextSilbing---獲取div元素的後一個兄弟節點
		10,nextElementSibling
			div.nextElemnetSilbing----獲取div元素的後一個兄弟節點
		11,parentNode
			div.parentElement---獲取div元素的父親節點
		12,parentElement
			div.parentElement---獲取div元素的父親元素節點
		13,attributes
			div.attributs---獲取div的所有屬性節點

建立節點

		1,createElement()--建立元素節點
			document.creatElement('div')---建立一個div節點
		2,createTextNode()---建立文字節點
			document.creatTextNode('文字內容')---建立一個文字節點
		3,createComment()---建立一個註釋節點
			document.creatComment("註釋內容")---建立一個註釋節點
		4,createAttribute()---建立一個屬性節點
			document.creatAttribute('屬性名')---建立一個屬性節點
		5,createDocumentFragment()
			文件碎片

插入節點

		1,appendChild()---在末尾新增孩子節點
			div.appendChild(要新增的節點)---在div的末尾新增新節點
		2,insertBefore()---在某個孩子元素之前插入節點
			div.insertBefore(要插入的節點,你要插入到那個元素前面)---把一個新節點插入到某個元素之前

刪除節點

		1,removeChild()---刪除一個孩子節點
			div.remove(要刪除的節點)---刪除div的某個節點
		2,remove()---刪除某個節點
			div.remove()---刪除div節點

替換節點

		1,repalceChild()---用一個新節點替換老孩子節點
			div.replaceChild(新節點,老節點)---用一個新節點替換div裡的一個孩子節點

克隆節點

		1,cloneNode(引數)---克隆節點
			div.cloneNode()---克隆一個div節點
			引數
				引數預設為false,不克隆後代節點
				可以填選true,克隆後代節點

節點屬性

	nodeType--節點型別
		元素節點:1
		屬性節點:2
		文字節點:3
		註釋節點:8
	nodeName---節點名稱
		DIV--元素節點:大寫標籤名
		id  --屬性節點:屬性名
		文字節點:#text
		註釋節點:#comment
	nodeValue---節點的值
		元素節點:null
		屬性節點:屬性值
		文字節點:文字內容(包含換行和空格)
		註釋節點:註釋內容(包含換行和空格)