我是FE,也是Fe

          前端來源于不斷的點滴積累。我一直在努力。

          統計

          留言簿(15)

          閱讀排行榜

          評論排行榜

          使用table自帶方法和DOM方法操作HTML table的區別

          table表格的操作有兩種方法,一種是標準的Table對象方法:

          方法 描述 IE F O W3C
          createCaption() 為表格創建一個 caption 元素。 4 1 9 Yes
          createTFoot() 在表格中創建一個空的 tFoot 元素。 4 1 9 Yes
          createTHead() 在表格中創建一個空的 tHead 元素。 4 1 9 Yes
          deleteCaption() 從表格刪除 caption 元素以及其內容。 4 1 9 Yes
          deleteRow() 從表格刪除一行。 4 1 9 Yes
          deleteTFoot() 從表格刪除 tFoot 元素及其內容。 4 1 9 Yes
          deleteTHead() 從表格刪除 tHead 元素及其內容。 4 1 9 Yes
          insertRow() 在表格中插入一個新行。 4 1 9 Yes
          詳見w3c school http://www.w3school.com.cn/htmldom/dom_obj_table.asp

          還有一種方法就是標準的DOM操作方法。只是將table看成一個普通的DOM元素來操作。兩種方法都寫一個代碼在表格中增加100*100個單元格。

          <table border="1" id="table1" bordercolor="#000" style="border-collapse:collapse;"></table>

          代碼一:使用Table對象
          //使用table自帶的方法操作
                      var table1= document.getElementById("table1")
                      
          for (var i=0;i<100 ; i++){
                          
          var row = table1.insertRow(-1);
                          
          for (var j=0;j<100 ; j++){
                              
          var cell = row.insertCell(-1);
                              cell.innerHTML
          =(new Date()).getTime();
                          }
                      }

          代碼二:使用DOM操作:
          var f = document.createDocumentFragment();
                      
          for (var i=0;i<100 ; i++){
                          
          var tr = document.createElement("tr");
                          
          for (var j=0;j<100 ; j++){
                              
          var td = document.createElement("td");
                              
          var text = document.createTextNode((new Date()).getTime());
                              td.appendChild(text);
                              tr.appendChild(td);
                          }
                          f.appendChild(tr);
                      }
                      document.getElementById(
          "tbody1").appendChild(f);

          我先測試了一下兩種方法的運行性能。我力求用性能最好的DOM操作方法去操作table。粗略的測試出的數據

          Internet Explorer 8 FireFox 3.6.13 Chrome 8 Safari 5 Opera 10
          使用DOM操作 1204ms 380ms 62ms 170ms 174ms
          使用table操作 14719ms 2404ms 423ms 199ms 357ms

          使用DOM的操作性能顯然要比Table對象操作要快。我之所以去測試是擔心是否是原生的Table方法操作起來性能更好。從上面的數據明顯可以說明。Table對象的方法其實也是DOM操作。影響性能的還是取決于頁面重繪的次數。顯然使用insertRow和inertCell也會導致頁面重繪。100*100次重繪。而使用DOM Fragment。頁面只重繪了1次。

          測試不同瀏覽器的耗時是想看看各種瀏覽器對Table對象的方法支持情況,還好,都支持。當然還是要惡心一下IE,誰叫他老是最慢。

          從代碼上來看使用Table標準方法的代碼比DOM操作的代碼要簡潔直觀一些。

          總的來說,對于少量的表格操作,可以使用Table對象自帶的方法來操作,對于大量的Table操作還是要使用最優的DOM操作。至于什么是最優的DOM操作。強烈推薦大家去看看High Performance JavaScript這本書"

          posted on 2011-01-04 16:37 衡鋒 閱讀(1037) 評論(0)  編輯  收藏 所屬分類: Web開發

          主站蜘蛛池模板: 金堂县| 福清市| 江陵县| 渝北区| 合江县| 乐至县| 永安市| 临清市| 西乌珠穆沁旗| 上饶市| 茂名市| 祁连县| 古交市| 衢州市| 金乡县| 德化县| 巴东县| 简阳市| 浑源县| 沙田区| 平度市| 德清县| 平陆县| 元朗区| 阳山县| 清河县| 南皮县| 天等县| 黎平县| 富阳市| 分宜县| 乌什县| 平利县| 遵化市| 涞水县| 临夏市| 佛坪县| 南郑县| 诸城市| 太和县| 安义县|