Skip to content

Instantly share code, notes, and snippets.

@koron
Last active December 17, 2015 11:05
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koron/9822289 to your computer and use it in GitHub Desktop.
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
Author

koron commented Mar 28, 2014

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

@koron
Copy link
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