再看看这个<form id=form1 name=form1><input id=txt name=txt></form><button onclick=test()>测试</button>
<div id=div1></div>
<script>
var count=1000;
var i=0;
var obj=null;function test(){
slow();
fast();
}function slow(){
var d=new Date();
for(i=0;i<count;i++){
 document.form1.txt.style.display=(i%2)?"block":"none" 
}
div1.innerHTML=div1.innerHTML+String(new Date()-d)+"&nbsp;&nbsp;&nbsp;"   

}
function fast(){
var d=new Date();
var css=document.form1.txt.style.display
for(i=0;i<count;i++){
css=(i%2)?"block":"none"
}
div1.innerHTML=div1.innerHTML+String(new Date()-d)+"<br>"   
}
</script>

解决方案 »

  1.   

    其实也不能全怪人家。你也有错啊:
    function table1(){
    var d=new Date();
    var tr=null;
    var td=null;
    for(i=0;i<count;i++){
    tr=tbl1.insertRow() 
    td=tr.insertCell()
    //tr.appendChild(td)
    td.innerHTML="gorush"
    }
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;&nbsp;&nbsp;" 
    }
    你多做了一步完全不必要的 tr.appendChild(td),速度慢了大约5、6倍。去掉后1和2的速度没有很大差异。
      

  2.   

    <BODY>
    <script>
    var count=1000;
    var i=0;
    function create(){
    table1()
    table2()
    table3()
    table4()
    }function table1(){
    var d=new Date();
    var tr=null;
    var td=null;
    for(i=0;i<count;i++){
    tr=tbl1.insertRow() 
    td=tr.insertCell()
    td.innerHTML="gorush"
    }
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;&nbsp;&nbsp; " 
    }function table2(){
    var d=new Date();
    var tr=null;
    var td=null;
    var tbody=tbl2.firstChild;
    for(i=0;i<count;i++){
    tr=document.createElement("TR") 
    td=document.createElement("TD")
    tbody.appendChild(tr) 
    tr.appendChild(td)
    td.innerHTML="gorush"
    }
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;&nbsp;&nbsp; " 
    }function table3(){
    var d=new Date();
    var tr=null;
    var tbody=tbl3.firstChild;
    var oldtr=tbody.firstChild;
    for(i=0;i<count;i++){
    tr=oldtr.cloneNode(true)  
    tbody.appendChild(tr) 
    }
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;&nbsp;&nbsp; " 
    }
    function table4(){
    var d=new Date();
    var ar = [];
    var st="<tr><td>gorush</td></tr>"
    for(i=0;i<count;i++){
    ar[i] = st
    }
    tbl4.parentNode.innerHTML=tbl4.outerHTML.replace(/<\/table>/i,"")+ar.join("")+"</table>";
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;<br>" 
    }</script><button onclick=create()>create table</button>
    <div id=div2 style="font-size:12px">&nbsp; </div><table id=tbl1 border style="display:inline">
    <tbody>
    <tr><td>gorush</td></tr>
    </tbody>
    </table><table id=tbl2 border style="display:inline">
    <tbody>
    <tr><td>gorush</td></tr>
    </tbody>
    </table><table id=tbl3 border style="display:inline">
    <tbody>
    <tr><td>gorush</td></tr>
    </tbody>
    </table>
    <span>
    <table id=tbl4 border style="display:inline">
    <tbody>
    <tr><td>gorush</td></tr>
    </tbody>
    </table>
    </span>
    </BODY>
      

  3.   

    其实如何才快我们在 http://expert.csdn.net/Expert/TopicView1.asp?id=1229961 中讨论的够多了
      

  4.   

    想当然的以为这样会更快,其实也未必:function table5(){
    var d=new Date();
    var ar = [tbl5.outerHTML.replace(/<\/table>/i,"")];
    var st="<tr><td>gorush</td></tr>"
    for(i=1;i<count-1;i++){
    ar[i] = ""
    }
    ar[count]="</table>"
    tbl5.parentNode.innerHTML=ar.join(st);
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"秒&nbsp;&nbsp;" 
    }
      

  5.   

    請問cloneNode這個函數是什么意思?對于這種var ar = [tbl5.outerHTML.replace(/<\/table>/i,"")];
    方法我如果碰到嵌套TABLE是就會出錯﹐所以我認為應該修正一下
    var ar = [tbl5.outerHTML.replace(/<\/table>$/i,"")];
      

  6.   

    呵呵,我只是测试一下速度而已,并不是写应用代码。真的要写应该是
    /<\s*\/table\s*>$/i
      

  7.   

    不过中间的循环看来是多余的:
    function table5(){
    var d=new Date();
    var ar = new Array(count+1);
    var st="<tr><td>gorush</td></tr>"
    tbl5.parentNode.innerHTML=tbl5.outerHTML.replace(/<\/table>/i,"")+ar.join(st)+"</table>";
    div2.innerHTML=div2.innerHTML+String(new Date()-d)+"&Atilde;&euml;&nbsp;&nbsp;<br>" 
    }对换测试顺序后发现,排在前面的测试比较占便宜。
      

  8.   

    to emu_ston(emu):怎么说呢,我感觉你这样是纯粹为了速度才这样写的。因为你的这种写法并不是很常见的阿
    这样可读性就。我的代码的那几种方法都还算常规的啦
      

  9.   

    to emu_ston(emu):你看了我第2个回复的另一个试验没有?那个 slow()和 fast()的。呵呵。区别也很大哦
      

  10.   

    看了,你做了个很不公平的试验。fast方法并不象你想像的那样发挥作用。因为display并不象style是个带功能的对象,它只是style对象的一个String类型的属性:<BODY>
    <input id=t>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    alert(t.style.display.constructor)
    //-->
    </SCRIPT>
    </BODY>所以var css=document.form1.txt.style.display只是复制了display串得到一个新的串。然后你不停的改新的串的内容,对style对象一点影响都没有。
      

  11.   

    本来是要写成这样的
    var css=document.form1.txt.style
    for(i=0;i<count;i++){
    css.display=(i%2)?"block":"none"
    }
    发贴的时候觉得可以写得更进一步,结果写错了(我居然没有细加测试,晕)这个代码只是说明一个问题。把对象缓存为局部变量,操作起来会快很多