var html = "";
for(var i = 0; i < 1000; i++){
    html += "<div></div>";
}var fragment = document.createDocumentFragment();
请问,最高效率的把html字符串变量生成节点 并添加到fragment里去的算法是怎样的。
再问,最短代码的把html字符串变量生成节点 并添加到fragment里去的算法是怎样的。

解决方案 »

  1.   

    一旦把节点添加到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);
        
    }
    document.body.appendChild(oFrag);
    这段代码中,document.body.appendChild()仅调用了一次,这意味首只需要进行一次屏幕的刷新。
      

  2.   


    正解!还可以:
    var html = [];
    for(var i = 0; i < 1000; i++){
        html.push("<div></div>");
    }document.body.innerHTML = html.join('');
      

  3.   

    1、能不循环尽量不要循环:var html = new Array(1001).join("<div></div>");2、输出最高效的是一次性innerHTML字符串:document容器.innerHTML = html;
      

  4.   

    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 属性。
      

  5.   

    没有困难,就创造困难上。
    没有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>
      

  6.   


    误解我意思了。。很明显你在1000个div外面又嵌套了一个div,很明显我不需要那个外层的div...
      

  7.   

    你为什么不在那FOR循环理进行逐个DIV对象的插入呢
      

  8.   

    在div外层嵌套了一个div,文档树变了。并不是说,爱钻牛角尖或是什么。如果这个div可以存在的话,那么那个documentFragment很明显就是多余的了。我发这个帖子已经很多天了,只是想知道答案而已,如果是在实际项目中,最不济我就执行appendChild 1000次, 也没有什么问题。 可能我没表达好我的意思吧。