有什么区别
$("#header").empty()
和
$("#header").html('')
?
另外,我应该使用什么? $(“#header”)。empty()更容易阅读,但是怎么可能比$(“#header”)。html(”)
解决方法
两者之间没有功能上的差异。使用.empty(),因为它更短(更简洁)和更可读。
不要担心性能差异。记住,jQuery不使用,因为它运行速度比香草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元素。