temporarily removing and later reinserting a DOM element?
Six days after the question was answered jQuery released 1.4 which contains the detach method. Which does exactly what you're looking for.
var detached = $('#element').detach();
$('body').append(detached);
Just remove the element from the document and keep a reference to it. There's no need to clone it.
var el;
function removeEl() {
el = $("#myElement")[0]; // Get the element itself
el.parentNode.removeChild(el);
}
function reinsertEl(node) {
node.appendChild(el);
}
As an aside since you mentioned it in your example, it's much simpler, clearer and faster to set the checked
property of a checkbox directly rather than use attr()
. There's no need to involve attributes at all and indeed jQuery's attr()
usually doesn't. Just do $("#myElement")[0].checked = true;
. It works in all mainstream browsers.
You may use the clone
method:
var els = $('.els'), saved = els.clone (true);
els.remove ();
// .... do other stuff
saved.appendTo ($('.wherever-you-want-to'));
That said, though, it's better to show & hide them (via display: none
, for example), than to manipulate the DOM as it's very expensive. If you have to, use DOM insertion & removal (as above), rather than .html ()
, which recreated a node from the given string every time.