var html = ""; for(var i = 0; i < 1000; i++){ html += "<div></div>"; }var fragment = document.createDocumentFragment(); 请问,最高效率的把html字符串变量生成节点 并添加到fragment里去的算法是怎样的。 再问,最短代码的把html字符串变量生成节点 并添加到fragment里去的算法是怎样的。
一旦把节点添加到document.body(或其后的节点)中,页面就会立即反映出这个变化。对于少量的更新,这是很好的。然而,当要向document.body添加大量数据时,如果逐个添加这些节点,这个过程有可能会十分缓慢。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。 假设你想创建十个新段落。你可能这样写:var arrText=["1","2","3","4","5","6","7","8","9","10"]; for(var i=0;i<arrText.length;i++) { var op=document.createElement("P"); var oText=document.createTextNode(arrText[i]); op.appendChild(oText); document.body.appendChild(op); } 这段代码运行良好,但问题是它调用了十次document.body.appendChild(),每次要产生一次页面刷新。这时,文档碎片会更高效:var arrText=["1","2","3","4","5","6","7","8","9","10"]; var oFrag=document.createDocumentFragment();for(var i=0;i<arrText.length;i++) { var op=document.createElement("P"); var oText=document.createTextNode(arrText[i]); op.appendChild(oText); oFrag.appendChild(op);
正解!还可以: var html = []; for(var i = 0; i < 1000; i++){ html.push("<div></div>"); }document.body.innerHTML = html.join('');
1、能不循环尽量不要循环:var html = new Array(1001).join("<div></div>");2、输出最高效的是一次性innerHTML字符串:document容器.innerHTML = html;
sorry...请大家认真看题目我的题目是 var html = ""; for(var i = 0; i < 1000; i++){ html += "<div></div>"; }var fragment = document.createDocumentFragment(); 把html字符串(该字符串已经确定,针对于如何生成的该字符串无需考虑)生成的节点添加到fragment变量里。代码最短的方案和代码效率最高的方案分别是什么。。 最终效果是 fragment.childNodes.length === 1000 //return true当然很明显 documentFragment不带有innerHTML 属性。
没有困难,就创造困难上。 没有INNERHTML,就创造个INNERHTML。 <body> <script> var html = ""; for(var i = 0; i < 1000; i++){ html += "<div>"+i+"</div>"; } var fragment = document.createDocumentFragment(); var div=document.createElement("div"); div.innerHTML=html; fragment.appendChild(div); document.body.appendChild(fragment); </script> </body>
for(var i=0;i<arrText.length;i++)
{
var op=document.createElement("P");
var oText=document.createTextNode(arrText[i]);
op.appendChild(oText);
document.body.appendChild(op);
}
这段代码运行良好,但问题是它调用了十次document.body.appendChild(),每次要产生一次页面刷新。这时,文档碎片会更高效:var arrText=["1","2","3","4","5","6","7","8","9","10"];
var oFrag=document.createDocumentFragment();for(var i=0;i<arrText.length;i++)
{
var op=document.createElement("P");
var oText=document.createTextNode(arrText[i]);
op.appendChild(oText);
oFrag.appendChild(op);
}
document.body.appendChild(oFrag);
这段代码中,document.body.appendChild()仅调用了一次,这意味首只需要进行一次屏幕的刷新。
正解!还可以:
var html = [];
for(var i = 0; i < 1000; i++){
html.push("<div></div>");
}document.body.innerHTML = html.join('');
var html = "";
for(var i = 0; i < 1000; i++){
html += "<div></div>";
}var fragment = document.createDocumentFragment();
把html字符串(该字符串已经确定,针对于如何生成的该字符串无需考虑)生成的节点添加到fragment变量里。代码最短的方案和代码效率最高的方案分别是什么。。 最终效果是 fragment.childNodes.length === 1000 //return true当然很明显 documentFragment不带有innerHTML 属性。
没有INNERHTML,就创造个INNERHTML。
<body>
<script>
var html = "";
for(var i = 0; i < 1000; i++){
html += "<div>"+i+"</div>";
}
var fragment = document.createDocumentFragment();
var div=document.createElement("div");
div.innerHTML=html;
fragment.appendChild(div);
document.body.appendChild(fragment);
</script>
</body>
误解我意思了。。很明显你在1000个div外面又嵌套了一个div,很明显我不需要那个外层的div...