Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I detect when a new element has been added to the document in jquery?

How can I detect when a new element has been added to the document in jquery ?

Explanation: I want to know when an element with class "column-header" has been added to the document. As I plan to run some javascript on those elements.

How can I do this ? I use jQuery javascript library.

like image 891
Prakash Raman Avatar asked Jan 24 '11 10:01

Prakash Raman


People also ask

How do you check if an element is added to DOM?

To check if an element is connected or attached to the DOM or the document object ( or otherwise called the context ), you can use the isConnected property in the element's object in JavaScript. The isConnected element property returns boolean true if it connected to the DOM ( document object) and false if not.

Which method is triggered when an element is added to DOM?

We can detect if an element has been added to DOM using the MutationObserver object. This provides the ability to observe for changes being made to the DOM tree.


2 Answers

The accepted answer uses an obsolete plugin from 2011 and the highest upvoted answer uses Mutation events which are now deprecated.

Today, a MutationObserver is what you should use to detect when an element has been added to the DOM. MutationObservers are now widely supported across all modern browsers (Chrome 26+, Firefox 14+, IE11, Edge, Opera 15+, etc).

Here's a simple example of how you can use a MutationObserver to listen for when an element is added to the DOM.

For brevity, I'm using jQuery syntax to build the node and insert it into the DOM.

var myElement = $("<div>hello world</div>")[0];

var observer = new MutationObserver(function(mutations) {
   if (document.contains(myElement)) {
        console.log("It's in the DOM!");
        observer.disconnect();
    }
});

observer.observe(document, {attributes: false, childList: true, characterData: false, subtree:true});

$("body").append(myElement); // console.log: It's in the DOM!

The observer event handler will trigger whenever any node is added or removed from the document. Inside the handler, we then perform a contains check to determine if myElement is now in the document.

You don't need to iterate over each MutationRecord stored in mutations because you can perform the document.contains check directly upon myElement.

To improve performance, replace document with the specific element that will contain myElement in the DOM.

like image 107
Elliot B. Avatar answered Oct 15 '22 21:10

Elliot B.


$(document).bind('DOMNodeInserted', function(e) {
    console.log(e.target, ' was inserted');
});

DOMNodeInserted is a DOM level 3 Event. That in turn means, you need a fairly new browser to support that kind of event.

Reference: MDC

like image 33
jAndy Avatar answered Oct 15 '22 21:10

jAndy