2012-12-19 52 views
0

我想根據行位置將表格拆分成兩個表格。我有一種方法來查找表格的行位置。現在我的要求是將表分成兩個表,只使用JavaScript。使用javascript根據行位置將表格拆分爲兩個

+1

你的意思是一個HTML表格嗎? – pablochan

+1

我們需要更多:顯示您已有的代碼,以及您嘗試過的內容。不要猶豫,使用[jsfiddle](http://jsfiddle.net/)。 – sp00m

+0

http://stackoverflow.com/questions/1763479/how-to-get-the-html-for-a-dom-element-in-javascript –

回答

2

希望它能幫助:

function splitTableIntoTwoTables(table, idx) { 

    var rows = table.getElementsByTagName("tr"), 
     newtable = table.cloneNode(false), 
     tbody = document.createElement("tbody"); 

    if (table.hasAttribute("id")) { 
     newtable.setAttribute("id", "splitted_"+table.getAttribute("id")); 
    } 

    for (var i = rows.length - 1; i > idx; i--) { 
     if (tbody.childNodes) { 
      tbody.insertBefore(rows[i].cloneNode(true), tbody.lastChild); 
     } else { 
      tbody.appendChild(rows[i].cloneNode(true)); 
     } 
     table.deleteRow(i); 
    } 

    newtable.appendChild(tbody); 
    var p = document.createElement("p"); 
    p.appendChild(document.createTextNode("=============>")); 
    if (table.nextSibling) { 
     table.parentNode.insertBefore(p, table.nextSibling); 
    } else { 
     table.parentNode.appendChild(p); 
    } 
    if (p.nextSibling) { 
     table.parentNode.insertBefore(newtable, p.nextSibling); 
    } else { 
     table.parentNode.appendChild(newtable); 
    } 
} 
1

請試試我的變種。適用於有或沒有tbodies的表格。它需要一張表格和一行索引,之後將被分割。

function split(table, index){ 
    var temp, clone = table.cloneNode(false), 
     trs = table.getElementsByTagName('tr'), 
     tbodies = table.getElementsByTagName('tbody'); 
    if (++index>=trs.length) return; 
    if (clone.id) clone.id+='-clone'; 
    while (index>0) { 
     if(tbodies[0] && (temp = tbodies[0].getElementsByTagName('tr').length) <= index) { 
      index -= temp; 
      clone.appendChild(tbodies[0]); 
     } else { 
      temp|0 && (temp = tbodies[0] ? clone.appendChild(tbodies[0].cloneNode(false)) : clone); 
      temp.appendChild(trs[0]); 
      index--; 
     } 
    } 
    table.parentNode.insertBefore(clone, table); 
}; 
+0

這很好,你使用getElementsByTagName(),因爲它真的很多快於querySelectorAll()! 爲什麼你把克隆放在原來的上面? I.m.h.o.像「前綴」+字符串這樣的前綴字符串總是比內存消耗更少,而不像追加字符串+ ='postfix'(參見Java中的StringBuffer)。 我也認爲有總是很好。 Btw。您的變體至少會在MSIE 10中與TWO 進行克隆;)(我已使用包含和標頭的表進行了測試)。 因此,在這個時候,我們都有機會寫出一個很好的分裂函數;) – HopeNick

+0

我在上面放置了克隆,因爲它比第一行傳輸第一行更快。 – Aleko

+0

'temp | 0 &&(temp =' - 夠酷,哈哈?測試temp是否爲元素 – Aleko

相關問題