DOM概覽

前端開膛手發表於2018-05-23

node節點,一共有10個重要屬性:

nodetype,得到1-12的數字,對應著不同的節點型別,

nodeName,得到節點名稱

nodeValue,得到節點值,string型別,不一定存在,沒有值的時候返回null

childNodes,得到子節點,返回列表(偽陣列)

parentNode,得到父節點

previousSIbling,得到前一個兄弟節點

nextSibling,下一個兄弟節點

firstChild,第一個子節點

lastChild,最後一個子節點

ownerDocument,當前文件的文件節點

7個方法:

hasChildNodes(),判斷有沒有子節點,返回布林值

appendChild(),插入節點

insertBefore(a,b) b為參照節點

removeChild(a)a為要刪除的節點

replaceChild(a,b)替換子節點,拿a替換b

cloneNode(true/false),選true為深複製,方法和子節點一併克隆,返回新克隆的節點

normarLize()標準化,針對文字節點而言


dom樹上的每一個節點都是node物件,12種型別,3種最常見

document節點------代表整個文件,也就是整個html,本身是window的屬性,也就是全域性變數,有幾個重要的屬性:

documentElement,指的是<html>標籤裡的內容

body,指的是<body>標籤裡的內容

title,指的是整個頁面的標題,也就是head標籤裡的title屬性,可以直接修改document.title

domain,指的是整個頁面的域名資訊,可讀可寫,但是不同於location.href,domain只能從低階域名向高階域名改

referer,可返回載入當前文件的文件的 URL


element節點,遇上的節點大部分都是element節點,它的一些重要屬性:

nodeType是1,

dir代表當前語言方向(ltr,rtl),

className,注意不是class

如何獲取節點:

1,Document.getELementById

2,Document.getELementsByName,獲取的偽陣列

3,Document.getELementsByClassName,獲取的偽陣列

4,Document.getELementsByTagName,獲取的偽陣列

5,querySelectAll,獲得偽陣列

6,querySelector

如何建立節點:

Document.creatElement()接收字串,或者標籤名,或者一段html


節點的標準特性(自帶的):

1,對於html是不區分大小寫的,js是區分大小寫的,不管html裡是大寫還是小寫,js中操作必須是轉換成小寫,如果是多單詞結合,應該轉換成駝峰寫法,如果有關鍵字,前面要加上html,比如html中lable標籤的for屬性要改成htmlFor

2,html標籤裡的屬性永遠是字串型別,而js中獲取的並不一定,比如input的maxLength是數字型別,checked為布林型別

3,js獲取的style是一個樣式物件

4,這些屬性只能獲取和設定,不能刪除

讀寫節點的標準特性和非標準特性(自定義的),和點語法不同的是,得到的永遠是字串型別;關鍵字正常使用,比如getAttribute(“class”):

getAttribute(), 

setAtrribute(),

hasAtrribute(),

removeAtrribute()

html5增加了dataSet屬性,保證了自定義屬性的合法性,dataSet屬性在html中不支援駝峰命名,比如:

data-first-name,js中可以用dataSetfirstName獲取

dataSet屬性是一個雙向的介面,也就是在js中可以實時地操作此屬性

優點:

1、自定義屬性合法化

2、方便管理

3、說明支援html,也指出css3,可以把屬性選擇器和dataSet屬性結合起來使用

attributes屬性可以把元素節點的所有屬性列舉出來,是一個偽陣列的形式,但是既可以用下標來定位,也可以用key來定位


文字節點:

文字節點裡麵包含的可以是純文字,也可以是轉義後的html節點

一點方法:

appendData(a)

deleteData(a,b)

insertData(a,b)

replaceData(a,b,c)

spliceData(a)

subStringData()

建立文字節點:

Document.creatTextNode()