Jasiu
Jasiu

Reputation: 2734

Emulate jQuery .detach() in older version?

I'm using jQuery 1.3.2 and currently I'm not in a position where I can hope for an upgrade. Consider this code that works in 1.4.2:

var some_elem = $('#some_element');
var other_elem = $('#other_element');
some_elem.detach();
other_elem.replaceWith(some_elem);

How should I rewrite this code to make it work in jQuery 1.3.2? It doesn't implement the .detach() method.

Upvotes: 2

Views: 525

Answers (2)

Felix Kling
Felix Kling

Reputation: 816870

detach [source] is calling remove [source] but sets a special flag to not delete all the data jQuery is using internally and was attached via data().

Aprat from clearing the data, remove is only doing the following to remove the element:

elem.parentNode.removeChild( elem );

You could create your own plugin:

(function($) {
    if(!$.fn.detach) {
        $.fn.detach = function() {
            return this.each(function() {
                if(this.parentNode) {
                    this.parentNode.removeChild( this );
                }
            });
       };
    }
}(jQuery));

Upvotes: 3

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385295

From the documentation for .detach():

The .detach() method is the same as .remove(), except that .detach() keeps all jQuery data associated with the removed elements. This method is useful when removed elements are to be reinserted into the DOM at a later time.

"All jQuery data" means all bound events and .data() items.

If you don't care about this, use .remove(), which has existed in jQuery since version 1.0.

Upvotes: 2

Related Questions