$().html(value) vs $().empty().append(value)

简介: 当需要清空某个dom结点内容时,我所知道的有两种方法:1.Element.removeChild(child) // Removing all children from an element var element = document.getElementById("test"); while (element.firstChild) { element.removeChild(element.firstChild); } 2.Element.innerHTML=""第一种方式虽然可读性较好,但显然不如第二种方法简洁。

当需要清空某个dom结点内容时,我所知道的有两种方法:
1.Element.removeChild(child)

   
// Removing all children from an element  
var element = document.getElementById("test");  
while (element.firstChild) {  
  element.removeChild(element.firstChild);  
}     

2.Element.innerHTML=""

第一种方式虽然可读性较好,但显然不如第二种方法简洁。
理论上方式2会比方式1快很多,从代码上来分析也是如此,至少方式二不用做while循环,也不用判断属性。事实上也的确如此,但只限于子结点较少的情况下。
在子结点个数多过的情况下,方式1是优于方式2的。性能测试之killing a lots of kids   

jquery提供了两个类似的接口与之相对应:
1.$().empty()
2.$().html('')

所以,替换dom内容也同样有两种方式:
1.$().empty().append(HTMLString|HTMLElement|jQueryElement)
2.$().html(HTMLString)

jQuery 1.9.1 empty方法实现如下,与方式1相似

      
empty: function() {
    var elem,
        i = 0;

    for ( ; (elem = this[i]) != null; i++ ) {
        // Remove element nodes and prevent memory leaks
        if ( elem.nodeType === 1 ) {
            jQuery.cleanData( getAll( elem, false ) );
        }

        // Remove any remaining nodes
        while ( elem.firstChild ) {
            elem.removeChild( elem.firstChild );
        }

        // If this is a select, ensure that it displays empty (#12336)
        // Support: IE<9
        if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
            elem.options.length = 0;
        }
    }

    return this;
}  

jQuery 1.9.1 html方法的实现:

    
html: function( value ) {
        return jQuery.access( this, function( value ) {
            var elem = this[0] || {},
                i = 0,
                l = this.length;

            if ( value === undefined ) {
                return elem.nodeType === 1 ?
                    elem.innerHTML.replace( rinlinejQuery, "" ) :
                    undefined;
            }

            // See if we can take a shortcut and just use innerHTML
            if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
                ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
                ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
                !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {

                value = value.replace( rxhtmlTag, "<$1></$2>" );

                try {
                    for (; i < l; i++ ) {
                        // Remove element nodes and prevent memory leaks
                        elem = this[i] || {};
                        if ( elem.nodeType === 1 ) {
                            jQuery.cleanData( getAll( elem, false ) );
                            elem.innerHTML = value;
                        }
                    }

                    elem = 0;

                // If using innerHTML throws an exception, use the fallback method
                } catch(e) {}
            }

            if ( elem ) {
                this.empty().append( value );
            }
        }, null, value, arguments.length );
    },

可以看到,当传入的参数不为html字符串时,会执行这样的语句:

  
if ( elem ) {
    this.empty().append( value );
}  

不言而喻,当传入的参数不为html字符串或html字符串较长时,$().empty().append(value)的性能会优于$().html(value),性能测试之jquery html vs empty append;
同时,基于代码可读性也建议优先使用$().empty().append(value)

refs :
jquery-html-vs-empty-append
kill-lots-kids
deleting-child-nodes-of-a-div-node
Element.innerHTML

相关文章
|
3月前
|
前端开发 JavaScript 定位技术
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
33 0
|
10月前
|
XML 前端开发 JavaScript
【CSS】CSS+HTML‘VS’CSS+XML
【CSS】CSS+HTML‘VS’CSS+XML
64 0
html+css实战7-vs code的简介和使用
html+css实战7-vs code的简介和使用
116 0
html+css实战7-vs code的简介和使用
|
Web App开发 存储 XML
深入学习SAP UI5框架代码系列之三:HTML原生事件 VS UI5 Semantic事件
(0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) UI5 module懒加载机制 (2) UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件(本文) (4) UI5控件元数据实现细节 (5) UI5控件的实例数据实现细节 (6) UI5控件数据绑定的实现原理 (7) UI5控件数据绑定的三种模式:One Way,Two Way和OneTime实现原理比较 (8) UI5控件ID的生成逻辑 (9) UI5控件的多语言(国际化,Internationalization,i18n)支持的实现原理 (10) XML视图里的b
162 0
深入学习SAP UI5框架代码系列之三:HTML原生事件 VS UI5 Semantic事件
|
移动开发 API C++
微信小程序 vs html5 :能力及限制
最后更新时间:2017-08-25 能力 生物识别。一般是指纹识别。基础库版本1.5.0 手机号快速填写组件(需用户主动点击,并确认授权,且小程序主体非个人),获得微信绑定的手机号。
1824 0
|
Web App开发 编解码 iOS开发
学习整理与细化(2)——HTML VS XHTML
//文档头 webpage title //文档体 webpage content 以上是HTML的文档基本结构 //声明文档类型 //文档头 webage title //文档体 weboage con...
898 0
|
Web App开发 前端开发 C#
vs2012 html5
引用:http://developer.51cto.com/art/201009/228743.htm Visual Studio 2010中的HTML 5项目模板可以让您率先体验HTML 5的魅力。
915 0
|
移动开发 C++ HTML5
vs 2010 支持 html5
引用:http://ppmoon.diandian.com/post/2012-01-16/17785152 为什么要准备浏览器因为要上网下载东西啦!嘿嘿,想要vs2010支持html首先要让vs升级到sp1。
942 0
|
13天前
|
前端开发 JavaScript 开发工具
【HTML/CSS】入门导学篇
【HTML/CSS】入门导学篇
21 0