jQuery - Событие Trigger, когда элемент удален из DOM

Я пытаюсь выяснить, как выполнить некоторый 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
});

спасибо.

203
задан sa125 4 February 2010 в 04:46
поделиться

2 ответа

Я не уверен, что для этого есть дескриптор события, поэтому вам придется сохранить копию 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");
1
ответ дан 23 November 2019 в 04:57
поделиться

Встроенного события для удаления элементов нет, но его можно создать методом удаления по умолчанию jQuery. Обратите внимание, что обратный вызов должен быть вызван перед фактическим удалением, чтобы сохранить ссылку.

(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();

Примечание: некоторые проблемы с этим ответом были описаны в других плакатах.

  1. Это не сработает, когда узел будет удален с помощью html() replace() или других методов jQuery
  2. Это событие пузырится
  3. jQuery UI переопределяет удаление, а также

Похоже, что наиболее элегантным решением этой проблемы является

: https://stackoverflow.com/a/10172676/216941

37
ответ дан 23 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: