jQuery - запускает событие, когда элемент удаляется из DOM - PullRequest
201 голосов
/ 04 февраля 2010

Я пытаюсь выяснить, как выполнить код js, когда элемент удален со страницы:

jQuery('#some-element').remove(); // remove some element from the page
/* need to figure out how to independently detect the above happened */

есть ли событие, приспособленное для этого, что-то вроде:

jQuery('#some-element').onremoval( function() {
    // do post-mortem stuff here
});

спасибо.

Ответы [ 14 ]

1 голос
/ 15 февраля 2017

Это как создать jQuery live remove listener :

$(document).on('DOMNodeRemoved', function(e)
{
  var $element = $(e.target).find('.element');
  if ($element.length)
  {
    // do anything with $element
  }
});

Или:

$(document).on('DOMNodeRemoved', function(e)
{
  $(e.target).find('.element').each(function()
  {
    // do anything with $(this)
  }
});
1 голос
/ 04 февраля 2010

Я не уверен, что для этого есть дескриптор события, поэтому вам придется сохранить копию DOM и сравнить с существующим DOM в каком-то цикле опроса - что может быть довольно неприятно. Firebug делает это, хотя - если вы проверяете HTML и запускаете некоторые DOM-изменения, он выделяет изменения желтым цветом в консоли Firebug на короткое время.

Кроме того, вы можете создать функцию удаления ...

var removeElements = function(selector) {
    var elems = jQuery(selector);

    // Your code to notify the removal of the element here...
    alert(elems.length + " elements removed");

    jQuery(selector).remove();
};

// Sample usage
removeElements("#some-element");
removeElements("p");
removeElements(".myclass");
0 голосов
/ 26 марта 2014

Это.

$.each(
  $('#some-element'), 
        function(i, item){
            item.addEventListener('DOMNodeRemovedFromDocument',
                function(e){ console.log('I has been removed'); console.log(e);
                })
         })
0 голосов
/ 25 января 2012

ссылка на ответ @David:

Когда вы хотите сделать soo с другой функцией, например. html (), как в моем случае, не забудьте добавить return в новую функцию:

(function() {
    var ev = new $.Event('html'),
        orig = $.fn.html;
    $.fn.html = function() {
        $(this).trigger(ev);
        return orig.apply(this, arguments);
    }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...