JavaScript的appendChild、insertBefore和insertAfter

來源:互聯網
上載者:User

1、appendChild

添加一個節點到指定的節點的子節點數組中

用法:target.appendChild(newChild)
newChild作為target的子節點插入最後的一子節點之後

來看個這個簡單的執行個體:在id為box-con 的末尾添加一個子節點div

 代碼如下 複製代碼

<div class="btns"><input type="button" value="插入元素" id="creatbtn"/></div>
<div   id="box-one">
<p class="con2" id="p1">1</p>
<p class="con2">2</p>
<p class="con2">3</p>
</div>

代碼

 代碼如下 複製代碼

window.onload =function () {var btn = document.getElementById("creatbtn");btn.onclick =function() {insertEle();}}function insertEle() { var oTest = document.getElementById("box-one");var newNode = document.createElement("div");newNode.innerHTML =" This is a newcon ";//oTest.appendChild(newNode);oTeset.insertBefore(newNode,null); // 這兩種方法均可實現}


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

 代碼如下 複製代碼

function insertEle() {
var oTest = document.getElementById("box-one");
var newNode = document.createElement("div");
var reforeNode = document.getElementById("p1");

newNode.innerHTML =" This is a newcon ";
oTest.insertBefore(newNode,reforeNode.nextSibling);//建立的元素節點插入到 id為p1後面節點元素的 前面,
                              也就是說 插入id為P1節點元素的後面。
}

由於可見insertBefore()方法的特性是在已有的子節點前面插入新的節點但是兩種情況結合起來發現insertBefore()方法插入節點,是可以在子節點列表的任意位置。


2、insertBefore

在現有的子節點前插入一個新的子節點

用法:target.insertBefore(newChild,existingChild)
          newChild作為target的子節點插入到existingChild節點之前
          existingChild為可選項參數,當為null時其效果與appendChild一樣

DEMO1:

 代碼如下 複製代碼

 <SCRIPT LANGUAGE="JavaScript">

window.onload=function(){

           var a =document.createElement("span");

           var b =document.createTextNode("蝸客css");

           a.appendChild(b);

            document.body.appendChild(a); //預設添加在文檔的最後。

           //如果我們想指定位置,那麼得使用insertBefore()

}

</SCRIPT>

輸出結果: 蝸客css

 

 代碼如下 複製代碼

 

DEMO2:
 

html:

<div id="b">測試一</div>

<div>測試二</div>

 

<SCRIPT LANGUAGE="JavaScript">

window.onload=function(){

var a =document.createElement("span");

var b =document.createTextNode("蝸客css");

a.appendChild(b);

 

var mubiao = document.getElementById("b");

mubiao.parentNode.insertBefore(a,mubiao);

//插入到div b  前面。

// 輸出結果:蝸客css  測試一 測試二

/*

parentElement.insertBefore( newElement  ,  targetElement );

從上面文法可以看出, 父元素, 新元素,目標元素 是 insertBefore使用的3要素。

其實我們可以不管  父元素, 因為 父元素我們 可以用 目標元素.parentNode 得到。

那麼insertBefore就很好用了。只要給2個參數 : 新元素 和目標元素。

那麼有沒有 insertAfter()方法呢?答案看下個例子。

*/

}

</SCRIPT>

3、insertAfter

在指定節點後添加一個同級的新節點。

用法:insertAfter(newEle, targetEle)
newEle是要新增的節點對象
targetEle是作為insertAfter的目標對象,newEle就是新增到targetEle的後面

我們知道JavaScript沒有insertAfter函數,因此需要自訂insertAfter函數:

 代碼如下 複製代碼

function insertAfter(newEl, targetEl){
    var parentEl = targetEl.parentNode;
    if(parentEl.lastChild == targetEl){
        parentEl.appendChild(newEl);
    }else{
        parentEl.insertBefore(newEl,targetEl.nextSibling);
    }
}

完整執行個體

 代碼如下 複製代碼

<html>
<head>
<title>appendChild、insertBefore和insertAfter函數</title>
</head>
<body>
<div id="target" style="width:400px;border:2px dashed #666;min_height:300px;_height:300px;">
 <div id="subnode" style="border:1px dashed #ee3333;height:100px;margin:3px;text-alien:center">
 <b style="font-size:24px;font-weight:bold">subnode</b>
 </div>
</div>
<script language="javascript">
function insertAfter(newEl, targetEl){
    var parentEl = targetEl.parentNode;
    if(parentEl.lastChild == targetEl){
        parentEl.appendChild(newEl);
    }else{
        parentEl.insertBefore(newEl,targetEl.nextSibling);
    }
}
var target = document.getElementById("target");
var subnode = document.getElementById("subnode");
//appendChild
var newElement = document.createElement("div");
newElement.id = "newnode";
newElement.style.cssText = "border:1px dashed #3333ee;height:100px;margin:3px;text-alien:center";
newElement.innerHTML = "<b style="font-size:24px;font-weight:bold">appendChild</b>";
target.appendChild(newElement);
//insertBefore
var beforeElement = document.createElement("div");
beforeElement.id = "beforenode";
beforeElement.style.cssText = "border:1px dashed #3333ee;height:100px;margin:3px;text-alien:center";
beforeElement.innerHTML = "<b style="font-size:24px;font-weight:bold">insertBefore</b>";
target.insertBefore(beforeElement,subnode);
//insertAfter
var afterElement = document.createElement("div");
afterElement.id = "insertAfter";
afterElement.style.cssText = "border:2px dashed #666;height:100px;width:400px;margin-top:3px;text-alien:center";
afterElement.innerHTML = "<b style="font-size:24px;font-weight:bold">insertAfter</b>";
insertAfter(afterElement,target);

</script>
</body>
</html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.