在JS中插入兄弟节点

Chr*_*ris 24 html javascript dom siblings

所以我有一个带有一些预标签的div,如下所示:

<div id="editor" >
    <pre contentEditable="true">1</pre>
    <pre contentEditable="true">2</pre>
    <pre contentEditable="true">3</pre>
</div>
Run Code Online (Sandbox Code Playgroud)

现在我想使用Javascript将新pre节点放在1和2之间.我一直在尝试这样做(因为我理解DOM是一个双重链接的树),但我感觉可能是指针因为我正在接近它,所以不可编辑.

(只是事件处理程序中的一个片段,e是事件)

var tag = e.srcElement;
    if(tag.nextSibling){
        var next = tag.nextSibling;
        var newPre = document.createElement('pre');
        newPre.setAttribute("contentEditable", "true");
        newPre.innerHTML = "boom";
        tag.nextSibling = newPre;
        newPre.nextSibling = next;
    }
Run Code Online (Sandbox Code Playgroud)

最后两行来自我的c ++经验,但在JS中感觉很吵.我该如何设置一个新的兄弟节点?

Min*_*hev 47

我将如何做到这一点:

JS

var container = document.getElementById('editor'),
    firstChild = container.childNodes[1];
if (container && firstChild) {
    var newPre = document.createElement('pre');
    newPre.setAttribute("contentEditable", "true");
    newPre.innerHTML = "boom";  
    firstChild.parentNode.insertBefore(newPre, firstChild.nextSibling);    
}
Run Code Online (Sandbox Code Playgroud)

jsfiddle:http://jsfiddle.net/bZGEZ/


Kev*_*gia 24

您还可以使用insertAdjacentElementinsertAdjacentHTML插入新的兄弟; 两者采取的选项beforebegin,beforeend,afterbeginafterend.

例:

var container = document.getElementById('editor'),
firstChild = container.childNodes[1];

var newPre = document.createElement('pre');
newPre.setAttribute("contentEditable", "true");
newPre.innerHTML = "boom";  
firstChild.insertAdjacentElement("afterend", newPre);
Run Code Online (Sandbox Code Playgroud)

  • 我已经编程多年了,这是我第一次听说`insertAdjacentElement`,它绝对是华丽的!谢谢! (6认同)