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
  • 15,755
  • 9
  • 35
  • 42

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
  • 284,740
  • 104
  • 634
  • 722
  • 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-
  • 101,209
  • 85
  • 267
  • 409
-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;
      }
    }
  }