作家
登录

javascript 异步的innerHTML使用分析

作者: 来源:www.28hudong.com 2013-03-30 02:00:52 阅读 我要评论

当然,这个分时加载技术只是一个辅助技术,本身没有添加节点的能力。如今,另一种更奇特的技术Asynchronous innerHTML又被开发出来了,不能不赞一下外国人在这方面研究是非常超前的。 复制代码 代码如下: function asyncInnerHTML(HTML, callback) { var temp = document.createElement('div'), frag = document.createDocumentFragment(); temp.innerHTML = HTML;//要加入的内容先放到这里。 (function(){ if(temp.firstChild) { frag.appendChild(temp.firstChild);//然后一点点挪到文档碎片 setTimeout(arguments.callee, 0);//利用异步调用自身拼凑文档碎片,直到div的节点被搬空 } else { callback(frag);//这里才是真正执行插入节点的操作 } })(); } 此技术的优点: 1. 利用闭包解决 IE6 的内存溢出问题 2. 利用setTimeout(fn,0) 这个hack将操作从队列中拖出,防止浏览器假死 3. 利用Document Fragment减少对页面的渲染次数 4. 回调的节点可以使用 DOM 标准的手法(appendChild)插入(如IE的table,tbody,tr,td等标签的innerHTML是只读的) 使用方法: 复制代码 代码如下: var htmlStr = '<div><p>...</p><p>...</p><div><div>...</div>'; asyncInnerHTML(htmlStr, function(fragment){ // You can treat 'fragment' as a regular node. document.body.appendChild(fragment); }); 不过,这个方法在table中添加节点时并不是个个浏览器都行得通,不得不说是一大败笔。经测试IE8,IE6,FF3.5渲染出现差错,chrome,safari4,opera10等能完好地把表格渲染出来。估计是IE8等在把节点转移到文档碎片时发生节点丢失现象。 .filament_table { border-collapse:collapse !important; border-top:1px solid #A9EA00; border-left:1px solid #C1DAD7; table-layout:fixed; width:400px; } .filament_table thead th { background:#A9EA00; color:#FCDE6A; border-bottom:1px solid #C1DAD7; border-right:1px solid #C1DAD7; padding:2px 5px; } .filament_table tbody td,.filament_table tbody th { border-bottom:1px solid #C1DAD7; border-right:1px solid #C1DAD7; padding:2px 5px; color:#76C2C3; } .filament_table tfoot td { border-bottom:1px solid #C1DAD7; border-right:1px solid #C1DAD7; background:#A9EA00; color:#FCDE6A; font-size:12px; padding:0; } .filament_table tbody td a{ text-decoration:none; color:#76C2C3; } .filament_table tbody tr:nth-child(even) { background:#F7FBFF; } 异步的innerHTML 开始 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 在FF3.5的firebug显示下,table新添加的节点,标签都丢失了。 在IE8的开发人员工具中,我们发现table新添加节点出错严重,见于IE一惯的表现,这是很正常的事! 相关演示可见无忧的贴子,发现这种方法不是最佳的插入动态内容的方法。 #myTable{height:300px;overflow:auto;border:1px solid #39F;width:600px; } table,td,th{font-size:12px;border-collapse:collapse;height:100%;border:1px solid #39F; } tr.odd{background:#B1E4F3; } td.index{background:#B1E4F3;color:#000066;text-align:center; } 1 姓名1 男 20 1987-12-7 这个人很懒,什么都没有留下 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  推荐阅读

  向大师们学习Javascript(视频与PPT)

Douglas Crockford:Douglas Crockford是JavaScript开发社区最知名的权威,是JSON、JSLint、JSMin和ADSafe之父,是《JavaScript:The Good Parts》(英文版、中文版)的作者。JavaScript的发明人Brendan Eich说他是>>>详细阅读


本文标题:javascript 异步的innerHTML使用分析

地址:http://www.17bianji.com/kaifa2/JS/27397.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)