節點類型主要有三種:元素節點,屬性節點和文本節點。
而對DOM的主要也就是圍繞元素節點和屬性節點的增刪改查。下面就分別從對元素節點的操作和對屬性節點的操作來介紹
查
在對DOM進行增刪改之前,首先要找到對應的元素。具體的查找方法如下:
getElementByID() // 得到單個節點 getElementsByTagName() // 得到節點數組 NodeList getElementsByName() // 得到節點數組 NodeList |
同時還可以利用元素節點的屬性獲取它的父子節點和文本節點:
子節點:
Node.childNodes
//獲取子節點列表NodeList; 注意換行在瀏覽器中被算作了text節點,如果用這種方式獲取節點列表,需要進行過濾
Node.firstChild
//返回第一個子節點
Node.lastChild
//返回最后一個子節點
父節點:
Node.parentNode
// 返回父節點
Node.ownerDocument
//返回祖先節點(整個document)
同胞節點:Node.PReviousSibling
// 返回前一個節點,如果沒有則返回null
Node.nextSibling
// 返回后一個節點
增
新增節點首先要創建節點,然后將新建的節點插入DOM中,所以下面分別介紹創建節點和插入節點的方法,復制節點的方法也在創建節點中進行介紹。
創建節點
1 | createElement() // 按照指定的標簽名創建一個新的元素節點 |
創建代碼片段(為避免頻繁刷新DOM,可以先創造代碼片段,完成所有節點操作之后統一添加到DOM中)
1 | createDocumentFragment() |
復制節點
clonedNode = Node.cloneNode(boolean)
// 只有一個參數,傳入一個布爾值,
true表示復制該節點下的所有子節點;
false表示只復制該節點
插入節點
/*插入node*/
parentNode.appendChild(childNode);
// 將新節點追加到子節點列表的末尾
parentNode.insertBefore(newNode, targetNode);
//將newNode插入targetNode之前
/*插入html代碼*/
node.insertAdjacentHTML(
'beforeBegin'
, html);
//在該元素之前插入代碼
node.insertAdjacentHTML(
'afterBegin'
, html);
//在該元素的第一個子元素之前插入代碼
node.insertAdjacentHTML(
'beforeEnd'
, html);
//在該元素的最后一個子元素之后插入代碼
node.insertAdjacentHTML(
'afterEnd'
, html);
//在該元素之后插入代碼
替換節點
parentNode.replace(newNode, targetNode);
//使用newNode替換targetNode
移除節點
12 | parentNode.removeChild(childNode); // 移除目標節點 node.parentNode.removeChild(node); //在不清楚父節點的情況下使用 |
屬性節點
操作屬性節點,就是對DOM樣式進行增刪改查。對于行內樣式、內聯樣式、外部樣式有不同的操作方法;各種方法獲得的樣式也有可讀可寫和只讀之分。
直接獲取CSS樣式
1 | node.style.color // 可讀可寫 |
Style本身的屬性和方法
123 | node.style.cssText //獲取node行內樣式字符串 node.style.length //獲取行內樣式個數 node.style.item(0) //獲取指定位置的樣式 |
獲取和修改元素樣式
HTML5為元素提供了一個新的屬性:classList 來實現對元素樣式表的增刪改查。操作如下:
node.classList.add(value);
//為元素添加指定的類
node.classList.contains(value);
// 判斷元素是否含有指定的類,如果存在返回true
node.classList.remove(value);
// 刪除指定的類
node.classList.toggle(value);
// 有就刪除,沒有就添加指定類
修改DOM特性的方法
1234 | Node.getAttribute( 'id' ) // 獲取 Node.setAttribute( 'id' ) // 設置 Node.removeAttribute() // 移除 Node.attributes // 獲取DOM全部特性 |
只讀方法
getComputedStyle是window的方法。它能夠獲取當前元素所有最終使用的CSS屬性值,但是是只讀的。它有兩個參數,第一個為傳入的節點,第二個可以傳入:hover, :blur等獲取其偽類樣式,如果沒有則傳入null。
然而IE并不支持getComputedStyle方法,可以使用currentStyle來保持兼容性:
window.getComputedStyle ? window.getComputedStyle(node,null) : node,currentStyle
新聞熱點
疑難解答