我有一个包含大约1,500行的表。
我正在使用以下jQuery代码从DOM中删除表:
$('#myTable').remove();
需要大约300毫秒,造成明显的滞后。
使用removeChild()做同样的事情:
var myTable = $('#myTable')[0] ;
myTable.parentNode.removeChild(myTable);
需要大约30毫秒。
我可以轻松使用removeChild()版本,但我很困惑为什么jQuery的remove()需要更长的时间? removeChild()版本是否没有清除jQuery的内容?
演示:jspref
答案 0 :(得分:8)
除了元素本身,所有绑定事件和jQuery 与元素相关联的数据将被删除。
这意味着:
cleanData
)这在源代码中清楚地显示:
remove: function( selector, keepData ) {
var elem,
i = 0;
for ( ; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( getAll( elem ) );
}
if ( elem.parentNode ) {
if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
setGlobalEval( getAll( elem, "script" ) );
}
elem.parentNode.removeChild( elem );
}
}
}
return this;
}