JavaScript-DOM操作

在之前的文章中,學(xué)習(xí)過了DOM的訪問方式,其中也把DOM相關(guān)的概念進(jìn)行了學(xué)習(xí),其實(shí)DOM的內(nèi)容還有很多,所以本文將會繼續(xù)學(xué)習(xí)DOM操作相關(guān)的內(nèi)容,DOM操作涉及到的操作有:、、,而這方面的內(nèi)容其實(shí)就是上一次所寫的“訪問方式”。

DOM的增加

DOM操作中指的是增加節(jié)點(diǎn),分為兩部分:創(chuàng)建節(jié)點(diǎn)插入節(jié)點(diǎn)。

創(chuàng)建節(jié)點(diǎn)

創(chuàng)建節(jié)點(diǎn)中常用的API方法主要有:

  1. document.createElement():創(chuàng)建指定的HTML元素
  2. document.createTextNode():創(chuàng)建文本節(jié)點(diǎn)
  3. document.createDocumentFrame():創(chuàng)建文檔片段
  4. document.createAttribute():創(chuàng)建節(jié)點(diǎn)屬性
  5. node.cloneNode():克隆節(jié)點(diǎn)

插入節(jié)點(diǎn)###

插入節(jié)點(diǎn)常用的API方法主要有:

  1. node.appendChild():末尾追加一個新節(jié)點(diǎn)
  2. node.insertBefore():插入一個新節(jié)點(diǎn)
<div id="div1">
<p id="p1">這是一個段落</p>
<p id="p2">這是另一個段落</p>
</div>

<script>
var para=document.createElement("p");
var node=document.createTextNode("這是新段落。");
para.appendChild(node);

var element=document.getElementById("div1");
element.appendChild(para);
</script>

例子解釋:

這段代碼創(chuàng)建新的 <p>元素:

 var para=document.createElement("p");

如需向 <p>元素添加文本,您必須首先創(chuàng)建文本節(jié)點(diǎn)。這段代碼創(chuàng)建了一個文本節(jié)點(diǎn):

var node=document.createTextNode("這是新段落。");

然后您必須向 <p>元素追加這個文本節(jié)點(diǎn):

para.appendChild(node);

最后您必須向一個已有的元素追加這個新元素。
這段代碼找到一個已有的元素:

var element=document.getElementById("div1");

這段代碼向這個已有的元素追加新元素:

element.appendChild(para);

關(guān)于document.createAttribute()

document.createAttribute() 方法創(chuàng)建并返回一個新的屬性節(jié)點(diǎn)。但是這個方法不是很常用,如果涉及到創(chuàng)建屬性,一般使用node.setAttribute()

<div id="div1">
<p id="p1">這是一個段落</p>
<p id="p2">這是另一個段落</p>
</div>

var node = document.getElementById('div1'); 
var newAttr = document.createAttribute('title');  //創(chuàng)建一個新的title屬性;

newAttr .nodeValue = 'Hello world!';  //title屬性的值是:Hello world!
node.setAttributeNode(attr); //運(yùn)用到對應(yīng)的元素節(jié)點(diǎn)上

關(guān)于node.cloneNode()

node.cloneNode(deep) 方法返回該節(jié)點(diǎn)的一個副本,deep 可選,表明是否采用深度克隆,如果為true ,則該節(jié)點(diǎn)的所有后代節(jié)點(diǎn)也都會被克隆,否則,只克隆該節(jié)點(diǎn)本身。

<div id="div1">
<p id="p1">這是一個段落</p>
<p id="p2">這是另一個段落</p>
</div>

var node = document.getElementById('div1');
var cloneNode = node.cloneNode(true); //克隆div1整個節(jié)點(diǎn);

cloneNode.id = "div2"; //修改克隆的節(jié)點(diǎn)id名稱為div2;
document.body.appendChild(cloneNode); //在網(wǎng)頁中追加克隆的節(jié)點(diǎn);

DOM的刪除

DOM節(jié)點(diǎn)的刪除主要API是node.removeChild();可以使用parentNode.removeChild(child)刪除指定父節(jié)點(diǎn)parentNode的一個子節(jié)點(diǎn)child,并返回被刪除的節(jié)點(diǎn)。

注意事項(xiàng):這個方法是要在被刪除的節(jié)點(diǎn)的父節(jié)點(diǎn)上調(diào)用的,而不是在被刪除節(jié)點(diǎn)上調(diào)用的,如果參數(shù)節(jié)點(diǎn)不是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn),removeChild 方法將報(bào)錯。

<div id="div1">
<p id="p1">這是一個段落。</p>
<p id="p2">這是另一個段落。</p>
</div>

<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>

例子解釋:

這個 HTML 文檔含有擁有兩個子節(jié)點(diǎn)(兩個<p>元素)的 <div> 元素:

<div id="div1">
<p id="p1">這是一個段落。</p>
<p id="p2">這是另一個段落。</p>
</div>

找到 id="div1"的元素:

var parent=document.getElementById("div1");

找到id="p1" 的 <p> 元素:

var child=document.getElementById("p1");

從父元素中刪除子元素:

parent.removeChild(child);

DOM的修改

修改節(jié)點(diǎn)常用的API方法主要有:

  1. appendChild():末尾追加一個新節(jié)點(diǎn)
  2. insertBefore():插入一個新節(jié)點(diǎn)
  3. replaceChild():替換節(jié)點(diǎn)

注意事項(xiàng):以上幾個方法都是操作的某個節(jié)點(diǎn)的子節(jié)點(diǎn),也就是說,要使用這幾個方法必須先取得父節(jié)點(diǎn)。另外并不是所有節(jié)點(diǎn)都有子節(jié)點(diǎn),如果在不支持子節(jié)點(diǎn)的節(jié)點(diǎn)上,調(diào)用了這些方法,將會導(dǎo)致錯誤。

DOM的查找

DOM節(jié)點(diǎn)中的查主要包括:查找元素節(jié)點(diǎn)查找

查找元素

  1. getElementById() --- 通過ID訪問;
  2. getElementsByClassName() --- 通過類名訪問;
  3. getElementsByTagName() --- 通過標(biāo)簽名稱訪問;
  4. querySelector() --- 通過CSS選擇器訪問(單個);
  5. querySelectorAll() --- 通過CSS選擇器訪問 (所有);

關(guān)于這一節(jié)的內(nèi)容,可以訪問上一篇文章:JavaScript-DOM訪問方式

節(jié)點(diǎn)查找

所有的節(jié)點(diǎn)都有這些屬性,都是可以用于訪問相關(guān)的node節(jié)點(diǎn):

  1. Node.childNodes: 訪問一個單元素下所有的直接子節(jié)點(diǎn)元素,可以是一個可循環(huán)的類數(shù)組對象。該節(jié)點(diǎn)集合可以保護(hù)不同的類型的子節(jié)點(diǎn)(比如text節(jié)點(diǎn)或其他元素節(jié)點(diǎn))。
  2. Node.firstChild: 與childNodes數(shù)組的第一個項(xiàng)(Element.childNodes[0])是同樣的效果,僅僅是快捷方式。
  3. Node.lastChild: 與childNodes數(shù)組的最后一個項(xiàng)(Element.childNodes[Element.childNodes.length-1])是同樣的效果,僅僅是快捷方式。
  4. Node.parentNode: 訪問當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),父節(jié)點(diǎn)只能有一個,祖節(jié)點(diǎn)可以用Node.parentNode.parentNode 的形式來訪問。
  5. Node.nextSibling: 訪問DOM樹上與當(dāng)前節(jié)點(diǎn)同級別的下一個節(jié)點(diǎn)。
  6. Node.previousSibling: 訪問DOM樹上與當(dāng)前節(jié)點(diǎn)同級別的上一個節(jié)點(diǎn)。

總結(jié)

DOM操作在JavaScript還是很重要的,簡單點(diǎn)說,所有的交互操作都是基于DOM來操作的。而DOM中的操作,最為熟悉的就是對DOM的增、刪、改、查。今天的內(nèi)容也就圍繞著這幾個方面展開學(xué)習(xí)。

參考資料:http://www.w3school.com.cn/htmldom/dom_intro.asp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應(yīng)用程序編程接口)。 ??DOM 描繪...
    霜天曉閱讀 3,866評論 0 7
  • 節(jié)點(diǎn) 節(jié)點(diǎn)類型 每個節(jié)點(diǎn)都有一個 nodeType 屬性,用于表示節(jié)點(diǎn)類型。nodeType 屬性返回節(jié)點(diǎn)的類型。...
    練曉習(xí)閱讀 558評論 0 4
  • 每天一句:成長的速度取決于在過程中發(fā)現(xiàn)和解決問題的速度,最終這是一個量變引發(fā)質(zhì)變的過程; DOM(Document...
    EndEvent閱讀 648評論 0 0
  • 目錄 1. 基本概念 1.1 Node類型 DOM1級定義了一個Node接口,該接口由DOM中所有節(jié)點(diǎn)類型實(shí)現(xiàn)。這...
    王童孟閱讀 503評論 0 1
  • 每天一句:成長的速度取決于在過程中發(fā)現(xiàn)和解決問題的速度,最終這是一個量變引發(fā)質(zhì)變的過程; DOM(Document...
    王梓懿_1fbc閱讀 227評論 0 0

友情鏈接更多精彩內(nèi)容