国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript 異步的innerHTML使用分析

2019-11-21 00:52:33
字體:
來源:轉載
供稿:網(wǎng)友
當然,這個分時加載技術只是一個輔助技術,本身沒有添加節(jié)點的能力。如今,另一種更奇特的技術Asynchronous innerHTML又被開發(fā)出來了,不能不贊一下外國人在這方面研究是非常超前的。
復制代碼 代碼如下:

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的節(jié)點被搬空
} else {
callback(frag);//這里才是真正執(zhí)行插入節(jié)點的操作
}
})();
}

此技術的優(yōu)點:
1. 利用閉包解決 IE6 的內存溢出問題
2. 利用setTimeout(fn,0) 這個hack將操作從隊列中拖出,防止瀏覽器假死
3. 利用Document Fragment減少對頁面的渲染次數(shù)
4. 回調的節(jié)點可以使用 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中添加節(jié)點時并不是個個瀏覽器都行得通,不得不說是一大敗筆。經(jīng)測試IE8,IE6,F(xiàn)F3.5渲染出現(xiàn)差錯,chrome,safari4,opera10等能完好地把表格渲染出來。估計是IE8等在把節(jié)點轉移到文檔碎片時發(fā)生節(jié)點丟失現(xiàn)象。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]

在FF3.5的firebug顯示下,table新添加的節(jié)點,標簽都丟失了。
flagment
在IE8的開發(fā)人員工具中,我們發(fā)現(xiàn)table新添加節(jié)點出錯嚴重,見于IE一慣的表現(xiàn),這是很正常的事!
flagment
相關演示可見無憂的貼子,發(fā)現(xiàn)這種方法不是最佳的插入動態(tài)內容的方法。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西丰县| 文水县| 赞皇县| 攀枝花市| 麻栗坡县| 开鲁县| 江西省| 丽水市| 连州市| 宁明县| 新建县| 博野县| 余江县| 泗阳县| 大宁县| 桃园县| 金昌市| 漳浦县| 扶绥县| 盘锦市| 雷州市| 平凉市| 白山市| 武夷山市| 富平县| 霍林郭勒市| 登封市| 上杭县| 托克托县| 同心县| 丹巴县| 尤溪县| 佳木斯市| 龙泉市| 白朗县| 嵊泗县| 宁国市| 岳西县| 长春市| 鄂温| 习水县|