Skip to content

Instantly share code, notes, and snippets.

@koron
Last active December 17, 2015 11:05
Show Gist options
  • Select an option

  • Save koron/9822289 to your computer and use it in GitHub Desktop.

Select an option

Save koron/9822289 to your computer and use it in GitHub Desktop.
Remove jQuery related objects when remove elements by DOM API
// jQuery GC Helper - v0.9.5
//
// Copyright (C) 2014 MURAOKA Taro
// Licensed under the MIT license.
(function(global, jQuery) {
var observer;
function callback(mutations) {
removedNodes = [];
function remove(node) {
if (removedNodes.indexOf(node) < 0) {
removedNodes.push(node);
}
}
function add(node) {
var n;
if ((n = removedNodes.indexOf(node)) >= 0) {
removedNodes.splice(n, 1);
}
}
for (var i = 0, I = mutations.length; i < I; ++i) {
var m = mutations[i];
if (m.addedNodes) {
for (var j = 0, J = m.addedNodes.length; j < J; ++j) {
var n = m.addedNodes[j];
add(n);
}
}
if (m.removedNodes) {
for (var j = 0, J = m.removedNodes.length; j < J; ++j) {
var n = m.removedNodes[j];
remove(n);
}
}
}
for (var i = 0, I = removedNodes.length; i < I; ++i) {
var n = removedNodes[i];
jQuery(n).remove();
}
}
observer = new global.MutationObserver(callback);
jQuery(function() {
observer.observe(global.document, {childList: true, subtree: true});
});
})(this, jQuery);
@koron
Copy link
Copy Markdown
Author

koron commented Mar 28, 2014

nodeType != 1 を消しちゃうと、いろいろ問題になった。

@koron
Copy link
Copy Markdown
Author

koron commented Mar 29, 2014

0.9.5 detach が上手く処理できてない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment