$().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

相关文章
|
12月前
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
296 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
前端开发 JavaScript 定位技术
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
Flutter vs 前端 杂谈:SliverAppBar、手动实现Appbar、前端Html+JS怎么实现滚动变化型Appbar - 比较
357 0
|
XML 前端开发 JavaScript
【CSS】CSS+HTML‘VS’CSS+XML
【CSS】CSS+HTML‘VS’CSS+XML
180 0
html+css实战7-vs code的简介和使用
html+css实战7-vs code的简介和使用
255 0
html+css实战7-vs code的简介和使用
|
移动开发 API C++
微信小程序 vs html5 :能力及限制
最后更新时间:2017-08-25 能力 生物识别。一般是指纹识别。基础库版本1.5.0 手机号快速填写组件(需用户主动点击,并确认授权,且小程序主体非个人),获得微信绑定的手机号。
1992 0
|
Web App开发 编解码 iOS开发
学习整理与细化(2)——HTML VS XHTML
//文档头 webpage title //文档体 webpage content 以上是HTML的文档基本结构 //声明文档类型 //文档头 webage title //文档体 weboage con...
1009 0
|
JavaScript
jQuery中.html(“xxx”)和.append("xxx")的区别和不同
append是追加,html是完全替换比如123$("#1").html("456");结果是:456$("#1").append("");结果是:123456--------------------------------------------------比如下面的环境就必须使用html而不能使用append “添加用户角色”和“编辑”都是弹出窗口形式,如果根据不同的需要来显示不同的权限勾选,那么使用append就会每次单击一个不同的按钮而追加一次内容。
1067 0
|
移动开发 C++ HTML5
vs 2010 支持 html5
引用:http://ppmoon.diandian.com/post/2012-01-16/17785152 为什么要准备浏览器因为要上网下载东西啦!嘿嘿,想要vs2010支持html首先要让vs升级到sp1。
1100 0
|
Web App开发 前端开发 C#
vs2012 html5
引用:http://developer.51cto.com/art/201009/228743.htm Visual Studio 2010中的HTML 5项目模板可以让您率先体验HTML 5的魅力。
1103 0