先看這個例子:
<html><br /> <head><br /> <title>insertBefore() Example</title><br /> <script type="text/javascript"><!--<br /> function insertM<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>essage() {<br /> var oNewP = document.createElement("p");<br /> var oText = document.createTextNode("Hello Universe!");<br /> oNewP.appendChild(oText);<br /> var oOldP = document.getElementsByTagName("p")[0];<br /> document.body.insertBefore(oNewP, oOldP);<br /> }</p><p>// --></script><br /> </head><br /> <body onload="insertMessage()"><br /> <p>Hello World!</p><br /> </body><br /></html>
當需要向document添加大量資料時,整個過程將變得很緩慢,因為每次調用appendChild方法,頁面就會更新並反映這個變化。
解決的辦法是使用createDocumentFragment函數建立一個文檔片段,最後一次性添加到document中。
代碼如下:
<html><br /> <head><br /> <title>insertBefore() Example</title><br /> <script type="text/javascript"><!--<br /> function addMessages() {<br /> var arrText = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"];</p><p> var oFragment = document.createDocumentFragment();</p><p> for (var i=0; i < arrText.length; i++) {<br /> var oP = document.createElement("p");<br /> var oText = document.createTextNode(arrText[i]);<br /> oP.appendChild(oText);<br /> oFragment.appendChild(oP);<br /> }</p><p> document.body.appendChild(oFragment);<br /> }</p><p>// --></script><br /> </head><br /> <body onload="addMessages()"><br /> </body><br /></html>