javascripthtmldomsiblings

Insert sibling node in JS


So I have a div with some pre tags in it, like so:

<div id="editor" >
    <pre contentEditable="true">1</pre>
    <pre contentEditable="true">2</pre>
    <pre contentEditable="true">3</pre>
</div>

Now I want to use Javascript to put a new pre node between 1 and 2. I've been trying to do it this way (since I understand the DOM is a doubly linked tree), but I'm getting the sense that maybe the pointers aren't editable as I'm approaching it.

(just a snippet inside an event handler, e being the event)

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;
    }

Those last two lines are from my c++ experience, but feel icky in JS. How would I set a new sibling node?


Solution

  • Here is how I would do that:

    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);    
    }
    

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