在旧版本中模拟jQuery .detach()?

时间:2011-08-11 13:37:30

标签: jquery

我正在使用jQuery 1.3.2,目前我还处于不希望升级的位置。请考虑在1.4.2中使用的代码:

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

我应该如何重写此代码以使其在jQuery 1.3.2中运行?它没有实现.detach()方法。

2 个答案:

答案 0 :(得分:3)

detach [source]正在调用remove [source],但会为设置一个特殊标记删除jQuery在内部使用的所有数据,并通过data()附加。

Aprat清除数据后,remove仅执行以下操作以删除元素:

elem.parentNode.removeChild( elem );

您可以创建自己的插件:

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

答案 1 :(得分:2)

来自.detach()的文档:

  

.detach()方法与.remove()相同,但.detach()除外   保持所有jQuery数据与删除的元素相关联。这个   当要删除的元素要重新插入时,方法很有用   以后的DOM。

“所有jQuery数据”表示所有绑定事件和.data()项。

如果您不关心这一点,请使用自1.0版以来在jQuery中存在的.remove()