快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱h88_机器人论坛



使用innerHTML代替createElement来动态添加网页内容已成为一种普遍的熟识。但在商务利用,大年夜数据的datagrid家常便饭,就算是innerHTML也捉襟见肘,于是人们又开拓了分时加载的技巧了(使用setTimeout)。当然,这个分时加载技巧只是一个帮助技巧,本身没有添加节点的能力。如今,另一种更奇特的技巧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);//这里才是真正履行插入节点的操作

}

})();

}

此技巧的优点:

使用闭经办理 IE6 的内存溢出问题

使用setTimeout(fn,0) 这个hack将操作从行列步队中拖出,防止浏览器假逝世

使用Document Fragment削减对页面的衬着次数

回调的节点可以应用 DOM 标准的伎俩(appe和记娱h88ndChild)插入(如IE的table,tbody,tr,td等标签和记娱h88的innerHTML是只读的)

应用措施:

var htmlStr = '

...

.和记娱h88..

...

';

asyncInnerHTML(htmlS和记娱h88tr, function(fragment){

// You can treat 'fragment' as a regular node.

document.body.appendChild(fragment);

});

不过,这个措施在table中添加节点时并不是个个浏览器都行得通,不得不说是一大年夜败笔。经测试IE8,IE6,FF3.5衬着呈现缺点,chrome,safari4,opera10等能齐全地把表格衬着出来。预计是IE8等在把节点转移到文档碎片时发生节点损掉征象。

异步的innerHTML

开始

运行代码和记娱h88

在FF3.5的firebug显示下,table新添加的节点,标签都损掉了。

您可能还会对下面的文章感兴趣: