在前几篇的博文中,我们说了利用appendChild方法可以在DOM文档流中指定的元素后追加利用createElement方法和createTextNode方法创建的新元素,但是appendChild追加的元素都是子元素,不可以现实我们需要下面说的在指定元素前或后插入新元素的方案。

insertBefore()方法

insertBefore()方法,可以实现把一个新元素插入到现在元素的前面,与现有元素形成兄弟关系。

前提条件

1、新元素,你想插入的新元素(newElement)

2、目标元素,你想把新元素插入到哪个元素的前面(targetELement)

3、父元素,目标元素的父元素(parentElement)

语法:

parentElement.insertBefore(newElement,targetElement);

注:

1、我们没有必要搞清楚或获取目标元素的父元素是谁,因为目标元素(targetElement)的父元素就是它本身的parentNode属性。

2、在DOM一个元素的父元素必须是另一个元素节点,属性节点或文本节点的子元素不允许是元素节点

例:

insertBefore()方法

1、我们新建一个P标签元素

2、然后新建一个“你好,墨初”的文本节点

3、将这两个节点都插入到ID为mochu的元素的前面

HTML代码:

<!DOCTYPE html>
    <head>
    </head>
    <body>
        <div id=“mochu”>
        ........
        </div>
    </body>
</html>

JavaScript代码

window.onload = function(){
    var para = document.createElement("p");//新建标签元素
    var txt = document.createTextNode("你好,墨初");//文本元素
    var mochu = getElementById("mochu");//获取指定元素
    para.appendChild(txt);//元素追加
    mochu.parentNode.insertBefore(para,mochu);
}

现在我们知道如何在一个目标元素前面加入新元素了,那在目标后面如何加入新元素呢?

insertAfter()自定义函数

javascript没有给我们提供,在目标元素后面加入新元素的函数,但是我们这里可以自己写

命名函数为 insertAfter

QQ截图20180111213615.png

代码:

function insertAfter(newElement,targetElement){
    var parent = targetElement.parentNode;
    if(parent.lastChild == targetElement){
        parent.appendChild(newElement);
    }else{
        parent.insertBefore(newElement,targetElement.nextSibling);
    }
}

通边上面的代码,我们新建了一个可以在指定元素后面追加元素的函数insertAfter(),当然上面的示例我们也可以这样修改!

例:

JS在目标元素后追加新元素

1、我们新建一个P标签元素

2、然后新建一个“你好,墨初”的文本节点

3、将这两个节点都插入ID为mochu元素的后面

HTML代码:

<!DOCTYPE html>
    <head>
    </head>
    <body>
        <div id=“mochu”>
        ........
        </div>
    </body>
</html>

JavaScript代码

window.onload = function(){
    var para = document.createElement("p");//新建标签元素
    var txt = document.createTextNode("你好,墨初");//文本元素
    var mochu = getElementById("mochu");//获取指定元素
    para.appendChild(txt);//元素追加
    insertAfter(para,mochu);
}

说明一下:insertAfter()函数为自定义的函数,并不是Javascript自带的函数。不能直接调用,一定要先创建再调用!