欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript之DOM插入更新刪除_動力節(jié)點Java學院整理

 更新時間:2017年07月03日 11:17:18   作者:liaoxuefeng  
這篇文章主要為大家詳細介紹了JavaScript之DOM插入更新刪除,具有一定的參考價值,感興趣的小伙伴們可以參考一下

JavaScript之DOM插入更新刪除,供大家參考,具體內容如下

更新

拿到一個DOM節(jié)點后,我們可以對它進行更新。

可以直接修改節(jié)點的文本,方法有兩種:

一種是修改innerHTML屬性,這個方式非常強大,不但可以修改一個DOM節(jié)點的文本內容,還可以直接通過HTML片段修改DOM節(jié)點內部的子樹:

// 獲取<p id="p-id">...</p>
var p = document.getElementById('p-id');
// 設置文本為abc:
p.innerHTML = 'ABC'; // <p id="p-id">ABC</p>
// 設置HTML:
p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ';
// <p>...</p>的內部結構已修改

innerHTML時要注意,是否需要寫入HTML。如果寫入的字符串是通過網絡拿到了,要注意對字符編碼來避免XSS攻擊。
第二種是修改innerTexttextContent屬性,這樣可以自動對字符串進行HTML編碼,保證無法設置任何HTML標簽:

// 獲取<p id="p-id">...</p>
var p = document.getElementById('p-id');
// 設置文本:
p.innerText = '<script>alert("Hi")</script>';
// HTML被自動編碼,無法設置一個<script>節(jié)點:
// <p id="p-id">&lt;script&gt;alert("Hi")&lt;/script&gt;</p>

兩者的區(qū)別在于讀取屬性時,innerText不返回隱藏元素的文本,而textContent返回所有文本。另外注意IE<9不支持textContent
修改CSS也是經常需要的操作。DOM節(jié)點的style屬性對應所有的CSS,可以直接獲取或設置。因為CSS允許font-size這樣的名稱,但它并非JavaScript有效的屬性名,所以需要在JavaScript中改寫為駝峰式命名fontSize

// 獲取<p id="p-id">...</p>
var p = document.getElementById('p-id');
// 設置CSS:
p.style.color = '#ff0000';
p.style.fontSize = '20px';
p.style.paddingTop = '2em';

插入

當我們獲得了某個DOM節(jié)點,想在這個DOM節(jié)點內插入新的DOM,應該如何做?
如果這個DOM節(jié)點是空的,例如,<div></div>,那么,直接使用innerHTML = '<span>child</span>'就可以修改DOM節(jié)點的內容,相當于“插入”了新的DOM節(jié)點。
如果這個DOM節(jié)點不是空的,那就不能這么做,因為innerHTML會直接替換掉原來的所有子節(jié)點。
有兩個辦法可以插入新的節(jié)點。一個是使用appendChild,把一個子節(jié)點添加到父節(jié)點的最后一個子節(jié)點。例如:

<!-- HTML結構 -->
<p id="js">JavaScript</p>
<div id="list">
  <p id="java">Java</p>
  <p id="python">Python</p>
  <p id="scheme">Scheme</p>
</div>

<p id="js">JavaScript</p>添加到<div id="list">的最后一項:

var
  js = document.getElementById('js'),
  list = document.getElementById('list');
list.appendChild(js);

現在,HTML結構變成了這樣:

<!-- HTML結構 -->
<div id="list">
  <p id="java">Java</p>
  <p id="python">Python</p>
  <p id="scheme">Scheme</p>
  <p id="js">JavaScript</p>
</div>

因為我們插入的js節(jié)點已經存在于當前的文檔樹,因此這個節(jié)點首先會從原先的位置刪除,再插入到新的位置。
更多的時候我們會從零創(chuàng)建一個新的節(jié)點,然后插入到指定位置:

var
  list = document.getElementById('list'),
  haskell = document.createElement('p');
haskell.id = 'haskell';
haskell.innerText = 'Haskell';
list.appendChild(haskell);

這樣我們就動態(tài)添加了一個新的節(jié)點:

<!-- HTML結構 -->
<div id="list">
  <p id="java">Java</p>
  <p id="python">Python</p>
  <p id="scheme">Scheme</p>
  <p id="haskell">Haskell</p>
</div>

動態(tài)創(chuàng)建一個節(jié)點然后添加到DOM樹中,可以實現很多功能。舉個例子,下面的代碼動態(tài)創(chuàng)建了一個<style>節(jié)點,然后把它添加到<head>節(jié)點的末尾,這樣就動態(tài)地給文檔添加了新的CSS定義:

var d = document.createElement('style');
d.setAttribute('type', 'text/css');
d.innerHTML = 'p { color: red }';
document.getElementsByTagName('head')[0].appendChild(d);

可以在Chrome的控制臺執(zhí)行上述代碼,觀察頁面樣式的變化。

insertBefore

如果我們要把子節(jié)點插入到指定的位置怎么辦?可以使用parentElement.insertBefore(newElement, referenceElement);,子節(jié)點會插入到referenceElement之前。
還是以上面的HTML為例,假定我們要把Haskell插入到Python之前:

<!-- HTML結構 -->
<div id="list">
  <p id="java">Java</p>
  <p id="python">Python</p>
  <p id="scheme">Scheme</p>
</div>

可以這么寫:

var
  list = document.getElementById('list'),
  ref = document.getElementById('python'),
  haskell = document.createElement('p');
haskell.id = 'haskell';
haskell.innerText = 'Haskell';
list.insertBefore(haskell, ref);

新的HTML結構如下:

<!-- HTML結構 -->
<div id="list">
  <p id="java">Java</p>
  <p id="haskell">Haskell</p>
  <p id="python">Python</p>
  <p id="scheme">Scheme</p>
</div>

可見,使用insertBefore重點是要拿到一個“參考子節(jié)點”的引用。很多時候,需要循環(huán)一個父節(jié)點的所有子節(jié)點,可以通過迭代children屬性實現:

var
  i, c,
  list = document.getElementById('list');
for (i = 0; i < list.children.length; i++) {
  c = list.children[i]; // 拿到第i個子節(jié)點
}

刪除

刪除一個DOM節(jié)點就比插入要容易得多。
要刪除一個節(jié)點,首先要獲得該節(jié)點本身以及它的父節(jié)點,然后,調用父節(jié)點的removeChild把自己刪掉:

// 拿到待刪除節(jié)點:
var self = document.getElementById('to-be-removed');
// 拿到父節(jié)點:
var parent = self.parentElement;
// 刪除:
var removed = parent.removeChild(self);
removed === self; // true

注意到刪除后的節(jié)點雖然不在文檔樹中了,但其實它還在內存中,可以隨時再次被添加到別的位置。
當你遍歷一個父節(jié)點的子節(jié)點并進行刪除操作時,要注意,children屬性是一個只讀屬性,并且它在子節(jié)點變化時會實時更新。

例如,對于如下HTML結構:

<div id="parent">
  <p>First</p>
  <p>Second</p>
</div>

當我們用如下代碼刪除子節(jié)點時:

var parent = document.getElementById('parent');
parent.removeChild(parent.children[0]);
parent.removeChild(parent.children[1]); // <-- 瀏覽器報錯

瀏覽器報錯:parent.children[1]不是一個有效的節(jié)點。原因就在于,當<p>First</p>節(jié)點被刪除后,parent.children的節(jié)點數量已經從2變?yōu)榱?,索引[1]已經不存在了。

因此,刪除多個節(jié)點時,要注意children屬性時刻都在變化。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • js網頁中隨意拖動的小方塊實現代碼

    js網頁中隨意拖動的小方塊實現代碼

    用CSS和JS制作的在網頁中可以隨意拖動的小方塊。
    2008-08-08
  • 關于捕獲用戶何時點擊window.onbeforeunload的取消事件

    關于捕獲用戶何時點擊window.onbeforeunload的取消事件

    關于捕獲用戶何時點擊window.onbeforeunload的取消事件的代碼,需要的朋友可以參考下。
    2011-03-03
  • js canvas實現紅包照片效果

    js canvas實現紅包照片效果

    這篇文章主要介紹了js canvas實現紅包照片效果
    2018-08-08
  • wap手機圖片滑動切換特效無css3元素js腳本編寫

    wap手機圖片滑動切換特效無css3元素js腳本編寫

    手機圖片滑動切換,網上有很多這樣的例子,但都借助于其他組件,讓代碼混亂的不行,本例無css3元素js腳本編寫,需要的朋友可以參考下
    2014-07-07
  • 十個開發(fā)人員面臨的最常見的JavaScript問題總結

    十個開發(fā)人員面臨的最常見的JavaScript問題總結

    今天,JavaScript?是幾乎所有現代?Web?應用的核心。這就是為什么JavaScript問題,以及找到導致這些問題的錯誤,是?Web?發(fā)者的首要任務。本文總結了十個常見的問題及解決方法,需要的可以參考一下
    2022-11-11
  • javascript簡化代碼 A=alert w=document.writeln

    javascript簡化代碼 A=alert w=document.writeln

    建議不要這樣寫代碼,考慮以后的修改才是最重要的,代碼分層.多把一個功能寫成一個js代碼或一個類,然后提供接口,這種寫法代碼會更多,速度也更慢,但人人都推薦這樣寫,是因為這樣子維護方便.而程序不可能一次性寫得完美的,永遠都可以改進
    2008-02-02
  • electron-builder打包exe后白屏的解決方法

    electron-builder打包exe后白屏的解決方法

    這篇文章主要給大家介紹了electron-builder打包exe后白屏的解決方法,文中有相關的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • Javascript BOM學習小結(六)

    Javascript BOM學習小結(六)

    BOM:BrowserObjectModel,瀏覽器對象模型,提供JS中對瀏覽器的各種操作的對象,是JS應用中唯一沒有相關標準的部分,這事BOM經常出現問題的所在,主要用于處理瀏覽器窗口與框架,瀏覽器特有的JS擴展也被默認為BOM的一部分,而各瀏覽器之間的公有對象就成了默認的標準
    2015-11-11
  • 圖片文字識別(OCR)插件Ocrad.js教程

    圖片文字識別(OCR)插件Ocrad.js教程

    這篇文章主要為大家詳細介紹了圖片文字識別(OCR)插件Ocrad.js教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • es7學習教程之Decorators(修飾器)詳解

    es7學習教程之Decorators(修飾器)詳解

    這篇文章主要給大家介紹了關于es7中Decorators(修飾器)的相關資料,文中通過示例代碼給大家介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-07-07

最新評論