我是FE,也是Fe

          前端來源于不斷的點(diǎn)滴積累。我一直在努力。

          統(tǒng)計(jì)

          留言簿(15)

          閱讀排行榜

          評論排行榜

          使用table自帶方法和DOM方法操作HTML table的區(qū)別

          table表格的操作有兩種方法,一種是標(biāo)準(zhǔn)的Table對象方法:

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

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

          <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);

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

          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對象操作要快。我之所以去測試是擔(dān)心是否是原生的Table方法操作起來性能更好。從上面的數(shù)據(jù)明顯可以說明。Table對象的方法其實(shí)也是DOM操作。影響性能的還是取決于頁面重繪的次數(shù)。顯然使用insertRow和inertCell也會導(dǎo)致頁面重繪。100*100次重繪。而使用DOM Fragment。頁面只重繪了1次。

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

          從代碼上來看使用Table標(biāo)準(zhǔn)方法的代碼比DOM操作的代碼要簡潔直觀一些。

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

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

          主站蜘蛛池模板: 曲沃县| 津南区| 江都市| 博湖县| 五河县| 和田县| 寿阳县| 巴彦县| 互助| 榕江县| 夏津县| 繁峙县| 平陆县| 河间市| 乐都县| 曲松县| 德兴市| 芒康县| 闽清县| 志丹县| 当涂县| 佛冈县| 子洲县| 苏尼特右旗| 邯郸市| 靖安县| 壤塘县| 晴隆县| 静海县| 博客| 内丘县| 青铜峡市| 乌审旗| 河北省| 襄垣县| 明星| 天全县| 靖安县| 曲阳县| 河池市| 巩义市|