Skip to content

Instantly share code, notes, and snippets.

@Minasokoni
Forked from cowboy/ba-detach.js
Created October 11, 2019 22:25
Show Gist options
  • Save Minasokoni/9d20552150f358a54b2328cfae4d86aa to your computer and use it in GitHub Desktop.
Save Minasokoni/9d20552150f358a54b2328cfae4d86aa to your computer and use it in GitHub Desktop.
JavaScript detach: detach a node from the DOM, optionally reattaching it when done.
/*!
* JavaScript detach - v0.2 - 5/18/2011
* http://benalman.com/
*
* Copyright (c) 2011 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
function detach(node, async, fn) {
var parent = node.parentNode;
var next = node.nextSibling;
// No parent node? Abort!
if (!parent) { return; }
// Detach node from DOM.
parent.removeChild(node);
// Handle case where optional `async` argument is omitted.
if (typeof async !== "boolean") {
fn = async;
async = false;
}
// Note that if a function wasn't passed, the node won't be re-attached!
if (fn && async) {
// If async == true, reattach must be called manually.
fn.call(node, reattach);
} else if (fn) {
// If async != true, reattach will happen automatically.
fn.call(node);
reattach();
}
// Re-attach node to DOM.
function reattach() {
parent.insertBefore(node, next);
}
}
// Get an element.
var elem = document.getElementById('huge-ass-table');
// Just detach element from the DOM.
detach(elem);
// Detach + exec fn + reattach, synchronous.
detach(elem, function() {
// this == elem, do stuff here.
});
// Detach + exec fn + reattach, asynchronous.
detach(elem, true, function(reattach) {
// this == elem, do stuff here, call reattach() when done!
setTimeout(reattach, 1000);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment