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

前端 未结 16 1924
面向向阳花
面向向阳花 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:53

    There is no built-in event for removing elements, but you can create one by fake-extending jQuery's default remove method. Note that the callback must be called before actually removing it to keep reference.

    (function() {
        var ev = new $.Event('remove'),
            orig = $.fn.remove;
        $.fn.remove = function() {
            $(this).trigger(ev);
            return orig.apply(this, arguments);
        }
    })();
    
    $('#some-element').bind('remove', function() {
        console.log('removed!');
        // do pre-mortem stuff here
        // 'this' is still a reference to the element, before removing it
    });
    
    // some other js code here [...]
    
    $('#some-element').remove();
    

    Note: some problems with this answer have been outlined by other posters.

    1. This won't work when the node is removed via html() replace() or other jQuery methods
    2. This event bubbles up
    3. jQuery UI overrides remove as well

    The most elegant solution to this problem seems to be: https://stackoverflow.com/a/10172676/216941

提交回复
热议问题