之间有什么区别吗?
$("#header").empty()
和
$("#header").html('')
另外,我应该使用哪个? $("#header").empty()
更具可读性,但有什么能比$("#header").html('')
更快?
答案 0 :(得分:39)
两者之间没有功能差异。使用.empty()
因为它更短(更简洁)且更易读。
不要担心性能差异。请记住,jQuery没有被使用,因为运行比vanilla JavaScript更快 - 它被使用,因为它的写更快。开发人员的时间远远超过处理器时间。
已经有一个jsPerf来比较相对表现:http://jsperf.com/jquery-empty-vs-html。 每个测试用例都显示.empty()
更快。
直接来自jQuery源:
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
}
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, "<$1></$2>");
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery( this );
self.html( value.call(this, i, self.html()) );
});
} else {
this.empty().append( value );
}
return this;
},
.empty()
不必处理检查不同的可能参数类型;它可以直接淘汰DOM元素。
答案 1 :(得分:2)
.empty()
快得多,请点击此处的效果:http://jsperf.com/jquery-empty-vs-html/17
答案 2 :(得分:1)
这是$()。empty
的实际源代码function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
}
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
}
正如您所看到的那样,它比.html('')
更具参与性,但正如Matt建议jQuery加速开发而不一定是执行。正如代码中的注释所示,在删除DOM节点后,在清理环境方面使用.empty
vs .html
是有好处的