2012-02-23 34 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>