1

I'm trying to insert a node both before and after a existing node. The problem is, it will only insert one of them. Odd. Can anyone explain why?

here's the code

// create your new node <p>Hi</p>
 var newNode = document.createElement("p");
 newNode.appendChild(document.createTextNode("Hi"));

// a existing node for reference
var refNode = document.getElementById("xyz");

// insert newNode before refNode
refNode.parentNode.insertBefore(newNode, refNode);

// insert newNode after refNode
refNode.parentNode.insertBefore(newNode, refNode.nextSibling);

PS thanks to karim79 who answered my previous question on insert after.

Community
  • 1
  • 1
Xah Lee
  • 16,755
  • 9
  • 37
  • 43

3 Answers3

5

When you add a node to a document, it is necessarily removed from any previous location. The same node cannot be in two locations.

What you want is a copy of the node in the second location:

// create your new node <p>Hi</p>
var newNode = document.createElement("p");
newNode.innerHTML = "Hi";

// a existing node for reference
var refNode = document.getElementById("xyz");

// insert newNode before refNode
refNode.parentNode.insertBefore(newNode, refNode);

// insert newNode after refNode
refNode.parentNode.insertBefore(newNode.cloneNode(true), refNode.nextSibling);
Phrogz
  • 296,393
  • 112
  • 651
  • 745
  • Here's a reference I have on my site for [`Node.cloneNode()`](http://objjob.phrogz.net/dom/method/573), and here is [the official documentation](http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-3A0ED0A4). – Phrogz Jan 26 '11 at 21:09
2

There is only one newNode. Inserting doesn't clone it - it moves it around.

Vilx-
  • 104,512
  • 87
  • 279
  • 422
-1
insert after (single llinked list list node *previous,single linked list node*new node)
     {
  if(new node==null)
    return;
else{
    if(previous==null)
    add first(new node);
else{
   single linked list node*nex=previous->;
   previous->next=new node;
   new node-> next=next;
      }
    }
  }