jQuery - Trigger event when an element is removed from the DOM

前端 未结 16 1931
面向向阳花
面向向阳花 2020-11-22 17:29

I\'m trying to figure out how to execute some js code when an element is removed from the page:

jQuery(\'#some-element\').remove(); // remove some element fr         


        
16条回答
  •  无人及你
    2020-11-22 17:54

    Only jQuery is required (No jQuery UI needed)

    (I have extracted this extension from the jQuery UI framework)

    Works with: empty() and html() and remove()

    $.cleanData = ( function( orig ) {
        return function( elems ) {
            var events, elem, i;
            for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
                try {
    
                    // Only trigger remove when necessary to save time
                    events = $._data( elem, "events" );
                    if ( events && events.remove ) {
                        $( elem ).triggerHandler( "remove" );
                    }
    
                // Http://bugs.jquery.com/ticket/8235
                } catch ( e ) {}
            }
            orig( elems );
        };
    } )( $.cleanData );
    

    With this solution you can also unbind the event handler.

    $("YourElemSelector").off("remove");
    

    Try it! - Example

    $.cleanData = (function(orig) {
      return function(elems) {
        var events, elem, i;
        for (i = 0;
          (elem = elems[i]) != null; i++) {
          try {
    
            // Only trigger remove when necessary to save time
            events = $._data(elem, "events");
            if (events && events.remove) {
              $(elem).triggerHandler("remove");
            }
    
            // Http://bugs.jquery.com/ticket/8235
          } catch (e) {}
        }
        orig(elems);
      };
    })($.cleanData);
    
    
    $("#DivToBeRemoved").on("remove", function() {
      console.log("div was removed event fired");
    });
    
    $("p").on("remove", function() {
      console.log("p was removed event fired");
    });
    
    $("span").on("remove", function() {
      console.log("span was removed event fired");
    });
    
    // $("span").off("remove");
    
    $("#DivToBeRemoved").on("click", function() {
      console.log("Div was clicked");
    });
    
    function RemoveDiv() {
      //       $("#DivToBeRemoved").parent().html("");    
      $("#DivToBeRemoved").remove();
    }
    
    

    OnRemove event handler attached to elements `div`, `p` and `span`.


    DIV TO BE REMOVED contains 1 p element which in turn contains a span element

    i am p (within div)

    i am span (within div)

    Additional Demo - jsBin

提交回复
热议问题