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

前端 未结 10 1340
猫巷女王i
猫巷女王i 2020-12-01 21:29

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 adde

相关标签:
10条回答
  • 2020-12-01 21:38

    I think the DOMNodeInserted method mentioned above is probably the sexiest choice, but if you need something that is going to work with IE8 and lower, you could do something like the following:

    // wrap this up in en immediately executed function so we don't 
    // junk up our global scope.
    (function() {
       // We're going to use this to store what we already know about.
       var prevFound = null;
    
       setInterval(function() {
          // get all of the nodes you care about.
          var newFound = $('.yourSelector');
    
          // get all of the nodes that weren't here last check
          var diff = newFound.not(prevFound);
    
          // do something with the newly added nodes
          diff.addClass('.justGotHere');
    
          // set the tracking variable to what you've found.
          prevFound = newFound;
       }, 100);
    })();
    

    That is just the basic idea, you can change that however you want, make a method out of it, keep the return value of the setInterval so you can stop it, or whatever you need to do. But it should get the job done.

    0 讨论(0)
  • 2020-12-01 21:44
    $(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

    0 讨论(0)
  • 2020-12-01 21:44

    How about using a poll - keep searching for an element with class "column-header", until you find it and then perform action. Seems simple.

    0 讨论(0)
  • 2020-12-01 21:47

    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.

    0 讨论(0)
  • 2020-12-01 21:48

    if you want to set same functions for all the elements with class column-header Then you may use jquery live()

    $(".column-header").live("click",function(){});
    
    0 讨论(0)
  • 2020-12-01 21:51

    Up to 2013 MutationEvents are deprecated. If anyone else has got problems detecting new elements in the dom, you can use MutationObservers Instead: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

    0 讨论(0)
提交回复
热议问题