2012-02-23 52 views
0

當我提醒document.formname.elements.length結果時mozilla不考慮使用以下函數在表中動態添加的元素。Mozilla中的javascript innerHTML

var rowCounter = 1; 

    for (i=0; i<oldIndex.length; i++) 
    { 
     newRow = tableToSort.insertRow((oldIndex.length+rowCounter)); 
     for (c=0; c<tableToSort.rows[i+1].cells.length; c++) 
     { 
      newCell = newRow.insertCell(c); 
      newCell.innerHTML = tableToSort.rows[oldIndex[i]].cells[c].innerHTML; 
      newCell.className="tblfirstcol"; 

     } 
     rowCounter++; 
     } 

這裏有什麼問題?

+0

Mozilla(該軟件)已經死了半年。你的意思是Firefox? – Quentin 2012-02-23 11:39:03

+0

ohhhhhh是的,我指的Firefox – chetan 2012-02-23 11:40:18

+0

假設你分配控制元素,在FF正常工作的新電池您將需要擴大你的測試用例 – 2012-02-23 11:51:04

回答

0

幾乎所有瀏覽器都會忽略以innerHTML粘貼到文檔中的元素,或者其他方式(丟失ID等)。

  1. 你首先要創建元素到文檔,然後通過appendChild()方法把它們添加到newCell

  2. 如果oldIndex[i]中的單元格應該從頁面中刪除,也可以使用swapNodes()-方法。

我會測試,如果oldIndex[i]單元格中的HTML可以被複製爲整個元素。所以,我會回來...

那麼,在這個答案忘記以上所有。這應該是工作,放置這兩條線,而不是你把innerHTML放入newCell的行。

var cellContent = tableToSort.rows[oldIndex[i]].cells[c].cloneNode(true); 
newCell=newRow.appendChild(cellContent); 

OOPS!代碼添加了整個單元格。糾正。現在也省略了原來的newCell定義。

+0

我有checkboxex第一列此代碼不能顯示覆選框和表看起來非常難看。 – chetan 2012-02-23 12:57:47

0

請注意,form.elements僅指在窗體提交算法中發生的窗體中的元素。因此,如果向表單添加另一個P元素,則不會增加form.elements.length。如果你添加一個INPUT元素,它會的。

隨着以下,我得到1,然後2,然後3在警報,這是預期的。最後一步是用innerHTML插入一個INPUT元素。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title></title> 
     <script> 
      window.addEventListener("DOMContentLoaded", function() { 
       var form = document.forms.test; 
       alert(form.elements.length); 
       var table = form.getElementsByTagName("table")[0]; 
       var row = table.insertRow(-1); 
       var cell = row.insertCell(-1); 
       cell.appendChild(document.createElement("input")); 
       alert(form.elements.length); 
       var another_row = table.insertRow(-1); 
       var another_cell = another_row.insertCell(-1); 
       another_cell.innerHTML = "<input>"; 
       alert(form.elements.length); 
      }, false); 
     </script> 
    </head> 
    <body> 
     <form name="test"> 
      <table> 
       <tbody> 
        <tr> 
         <td><input></td> 
        </tr> 
       </tbody> 
      </table> 
     </form> 
    </body> 
</html>