js:插入節點appendChild insertBefore使用方法

首先 從定義來理解 這兩個方法:?
appendChild() 方法:可向節點的子節點列表末尾添加新的子節點。語法:appendChild(newchild)?
insertBefore() 方法:可在已有的子節點前插入一個新的子節點。語法 :insertBefore(newchild,refchild)?
相同之處:插入子節點?
不同之處:實現原理方法不同。?
     appendChild 方法是在父級節點中子節點的末尾添加新的節點(相對于父級節點來說)。?
     insertBefore ?方法是在已有的節點前添加新的節點(相對于子節點來說的)。?

?

來看個這個簡單的實例:在id為box-one 的末尾添加一個子節點div?

1 <div class="btns">
  <input type="button" value="插入元素" id="creatbtn"/>
</div> 2 <div id="box-one"> 3   <p class="con2" id="p1">1</p> 4   <p class="con2" >2</p> 5   <p class="con2" >3</p> 6 </div>
 1 window.onload = function () { 
 2   var btn = document.getElementById("creatbtn"); 
 3   btn.onclick = function() { 
 4     insertEle(); 
 5   } 
 6 } 
 7 function insertEle() { 
 8   var oTest = document.getElementById("box-one"); 
 9   var newNode = document.createElement("div"); // createElement 是在對象中創建一個對象
10   newNode.innerHTML = " This is a newcon "; 
11   //oTest.appendChild(newNode); 
12   oTeset.insertBefore(newNode,null); // 這兩種方法均可實現 或者oTeset.insertBefore(newNode,oTeset.childNodes[0])
     13 }

這個insertBefore 的第一個參數 和appendChild的一樣,都是那個新的節點變量,而insert第二個參數不僅可以為null 。也可以這樣寫:

1 function insertEle() { 
2   var oTest = document.getElementById("box-one"); 
3   var newNode = document.createElement("div"); 
4   var reforeNode = document.getElementById("p1"); 
5   newNode.innerHTML = " This is a newcon "; 
6   oTest.insertBefore(newNode,reforeNode); // 新建的元素節點插入到 id為p1的元素前面 
//或者oTest.insertBefore(newNode,reforeNode.nextSibling);//新建的元素節點插入到 id為p1后面節點元素的前面,也就是說 插入id為P1節點元素的后面。?
7}

nextSibling :某個元素之后緊跟的元素(處于同一樹層級中)。?

reforeNode.nextSibling :取得的是reforeNode對象的緊跟著的下一個節點。?
previousSibling - 取得某節點的上一個同級節點。


//appendChild無法設置想要插入的明確位置 //oTest.appendChild(oP2);//insertBefore則可以設置 //oTest.insertBefore(oP2,null); //oTest.insertBefore(oP2,oP1); //oTest.insertBefore(oP2,oP1.nextSibling); //oTest.insertBefore(oP2,oP3.previousSibling); //oTest.insertBefore(oP2,oTest.childNodes[0]);

?

好了那么有insertBefore的應該也有insertAfter吧??
好那我們來用Aptana編寫一個例子吧,但Aptana的智能提示告訴我其實沒有insertAfter這個方法?
那么就自己定義一個羅
insertAfter定義?

1 function insertAfter(newEl, targetEl) { 
2     var parentEl = targetEl.parentNode; 
3     if(parentEl.lastChild == targetEl) { 
4         parentEl.appendChild(newEl); 
5     }else { 
6         parentEl.insertBefore(newEl,targetEl.nextSibling); 
7     } 
8 }     

?

總結:?
1、appendChild和insertBefore是做對節點的方法來使用的,而insertAfter只是自定義的一個函數?
2、insertBefore相對于appendChild來說,比較靈活可以將新的節點插入到目標節點子節點數組中的任一位置。?
3、使用appendChild和insertBefore來插入新的節點前提是,其兄弟節點必須有共同的父節點

?

如果只從DOM操作的性能上分析,appendChild和insertBefore這兩個方法本身是沒有太大差異的。但是insertBefore本身具有appendChild無法比擬的功能,它對插入元素的位置是可以選擇的。因此它對頁面可能造成的影響也更大,渲染的開銷也可能更大。

最后順便說一下,在IE6上,文檔加載完畢之前使用appendChild會出錯,而使用insertBefore就不會出錯。

轉載于:https://www.cnblogs.com/zhangym118/p/5872299.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542579.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pandas concat_pandas-數據合并-concat(最全參數解釋,含代碼和實例)

pandas中的concat的功能&#xff1a;假設你現在需要將多個數據合并&#xff0c;前提是&#xff1a;這幾個文件列名都一致&#xff0c;也就是說這幾個文件格式完全一樣&#xff0c;只是數據不太一樣&#xff0c;類似于合并多個文件這種&#xff0c;實際數據分析中也會遇到這種情…

java中的de是什么_【轉】java中main函數解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html從寫java至今&#xff0c;寫的最多的可能就是主函數public static void main(String[] args) {}但是以前一直都沒有問自己&#xff0c;為什么要這么寫&#xff0c;因為在c語言中就沒有這樣…

JAVA多線程(一)線程安全問題產生的原因

JAVA線程內存與主存間映射示意圖Java內存模型中規定了所有的變量都存儲在主內存中&#xff0c;每條線程還有自己的工作內存&#xff0c;線程的工作內存中保存了該線程使用的變量到主內存副本拷貝&#xff0c;線程對變量的所有操作&#xff08;讀取、賦值&#xff09;都必須在工…

兩頂點的路徑長度為k_計算兩個頂點之間的所有可能路徑

兩頂點的路徑長度為kWhat to Learn? 學什么&#xff1f; How to count all possible paths between two vertices? 如何計算兩個頂點之間的所有可能路徑&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在圖中&#xff0c;有許多從…

php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函數用法實例

本文實例講述了php中debug_backtrace、debug_print_backtrace和匿名函數用法。分享給大家供大家參考。具體分析如下&#xff1a;debug_print_backtrace() 是一個很低調的函數,很少有人注意過它.不過當我們對著一個對象調用另一個對象再調用其它的對象和文件中的一個函數出錯時,…

covariance matrix r語言_時間序列分析|ARIMAX模型分步驟詳解和R中實踐

這是關于時間序列的第N篇文章&#xff0c;本文將介紹ARIMAX模型&#xff0c;簡單來說就是在ARIMA的基礎上增加一個外生變量。ARIMAX和ARIMA相比在理論上沒有太多新的內容&#xff0c;所以本文直接介紹在R里怎么一步一步跑ARIMAX。在閱讀這篇文章前&#xff0c;需要對ARIMA有一定…

linux系統編程之文件與I/O(六):fcntl 函數與文件鎖

2013-05-14 11:26 8290人閱讀 評論(2) 收藏 舉報分類&#xff1a;linux系統編程&#xff08;19&#xff09; 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 一、fcntl函數 功能&#xff1a;操縱文件描述符&#xff0c;改變已打開的文件的屬性 int…

python 使用異常函數_您如何測試Python函數引發異常?

python 使用異常函數This article elaborates on how to implement a test case for a function that raises an exception. 本文詳細介紹了如何為引發異常的函數實現測試用例 。 Consider the following function: 考慮以下功能&#xff1a; import redef check_email_forma…

php 遠程圖片合拼,PHP實現將幾張照片拼接到一起的合成圖片功能【便于整體打印輸出】...

本文實例講述了PHP實現將幾張照片拼接到一起的合成圖片功能。共享給大家供大家參考&#xff0c;詳細如下&#xff1a;/*** 作品合成程序* 針對單面&#xff0c;封面不做特殊處理*/$src_path $argv[1]; // php該文件&#xff0c;第一個參數是文件夾名(作品集)&#xff0c;可相對…

bandizip最后一個無廣告版本_如果非要選擇一款壓縮軟件的話——Bandizip

全世界只有不到0.00~1 % 的人關注了我們得到你的關注是小幫的幸運壓縮解壓軟件是電腦一個必備軟甲&#xff0c;前面的文章介紹了一款開源小巧無廣告的壓縮解壓軟件windows工具軟件選擇之壓縮軟件——7-Zip&#xff0c;如果有人用不慣的話可以試試今天的這款。Bandizip 是一款來…

[MVC學習筆記]1.項目結構搭建及單個類在各個層次中的實現

新人剛開始學習ASP.NET MVC&#xff0c;若有不足之處希望能得到您的指點&#xff0c;不勝感激&#xff01; 先來一張項目的層級結構圖: Model&#xff1a;模型層&#xff0c;主要是各種類型、枚舉以及ORM框架&#xff0c;框架完成數據庫和實體類的映射。項目中選用了微軟的開源…

日期getUTCSeconds()方法以及JavaScript中的示例

JavaScript日期getUTCSeconds()方法 (JavaScript Date getUTCSeconds() method) getUTCSeconds() method is a Dates class method and it is used to get seconds from the current time according to the UTC (Universal time coordinated). getUTCSeconds()方法是Date的類方…

dedecms 在模板里引入php文件夾,dedecms如何添加并引入php文件

前言&#xff1a;有些時候我們需要創建一些單獨的PHP文件&#xff0c;但是隨便放入的PHP文件是不能夠編譯織夢 dedecms的標簽的&#xff0c;所以我們需要引入織夢標簽的編譯引擎方案。例如&#xff0c;我們在根目錄創建 example.php&#xff0c;代碼如下&#xff1a;<?php …

mybatisplus代碼生成器_想做時間管理大師?你可以試試Mybatis Plus代碼生成器

1. 前言對于寫Crud的老司機來說時間非常寶貴&#xff0c;一些樣板代碼寫不但費時費力&#xff0c;而且枯燥無味。經常有小伙伴問我&#xff0c;胖哥你怎么天天那么有時間去搞新東西&#xff0c;透露一下秘訣唄。好吧&#xff0c;今天就把Mybatis-plus的代碼生成器分享出來&…

安裝Oracle 11g RAC R2 之Linux DNS 配置

Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念&#xff0c;也就是指集群的單客戶端訪問名稱。SCAN 這個特性為客戶端提供了單一的主機名&#xff0c;用于訪問集群中運行的 Oracle 數據庫。如果您在集群中添加或刪除節點&#xff0c;使用 SCAN 的客戶端無需…

c++ websocket客戶端_websocket使用

websocket使用一、介紹在項目開發過程中&#xff0c;很多時候&#xff0c;我們不可避免的需要實現的一個功能&#xff1a; 服務端實時發送信息給客戶端。比如實時公告、實時訂單通知、實時報警推送等等&#xff0c;登錄后的客戶端需要知道與它相關的實時信息&#xff0c;以便進…

漢子編碼比字母編碼長_字母/博客作者編碼問題(使用動態編程)

漢子編碼比字母編碼長Problem statement: 問題陳述&#xff1a; Shivang is a blog writer and he is working on two websites simultaneously. He has to write two types of blogs which are: Shivang是一位博客作家&#xff0c;他同時在兩個網站上工作。 他必須寫兩種類型…

php parent報錯,mac brew 安裝php擴展報錯:parent directory is world writable but not sticky

$ brew install php70-mcrypt報錯&#xff1a;Error: parent directory is world writable but not sticky搜索到github的答案https://github.com/Homebrew/legacy-homebrew/issues/40345原因&#xff1a;/tmp目錄權限不對$ ls -ld /private/tmp打印出來 /private/tmp 被標黃了…

在cordova中使用HTML5的多文件上傳

2019獨角獸企業重金招聘Python工程師標準>>> 我們先看看linkface給開放的接口&#xff1a; 字段類型必需描述api_idstring是API 賬戶api_secretstring是API 密鑰selfie_filefile見下方注釋需上傳的圖片文件 1&#xff0c;上傳本地圖片進行檢測時選取此參數selfie_ur…

python dataframe切片_python pandas dataframe 行列選擇,切片操作方法

SQL中的select是根據列的名稱來選取&#xff1b;Pandas則更為靈活&#xff0c;不但可根據列名稱選取&#xff0c;還可以根據列所在的position&#xff08;數字&#xff0c;在第幾行第幾列&#xff0c;注意pandas行列的position是從0開始&#xff09;選取。相關函數如下&#xf…