浏览器独立性没有获得表行的值

时间:2011-12-27 12:32:23

标签: javascript html google-chrome firefox html-table

我无法获得一行的价值,因为它提供了Object Text(在FireFox和Chrome中),因为它应该是Object HTMLInputElement(在IE中)。  这在IE中运行顺利,但在Firefox中没有。

HTML code:

<table id="mode">

<tr class="jnclisthdrrow">
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">Rank</td>
    <td class ="jnclistcenter">Mode</td>

 </tr>
 <tr>
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">&nbsp;</td>
    <td class ="jnclistcenter">&nbsp;</td>

</tr>
<tr >
<td class="jnclistcb">
    <input type=checkbox name="MODE_SL_Instance" value="0"></td>
<td align="center" class="tdata">   1</td>
<td class = "listdataright"><option value=''></option><option value='1246'>CWT</option>
</td>
</tr>
</table>

JAVA脚本代码

 var table = document.getElementById("mode");
 var max = table.rows.length;
 console.log("no of rows are being selected="+max );
for ( var id = 0; id < max; id++ )
{   
    var row = table.rows[id];   
    var chkbox = row.cells[0].childNodes[0];
 if( null != chkbox && true == chkbox.checked ) 
    {
 console.log("inside the condition that anddeleted id ="+ id);
 table.deleteRow(id); 
    id--;
    }
}

控制台记录不同的浏览器

for fireFox和Chrome

没有选择行= 3

chkbox.checked框的值是=未定义复选框的值= [对象文本]

chkbox.checked框的值是=未定义复选框的值= [对象文本]

chkbox.checked框的值是=未定义复选框的值= [对象文本]

for IE

没有选择行= 3

chkbox.checked框的值是=未定义复选框的值= [对象文本]

chkbox.checked框的值是=未定义复选框的值= [对象文本]

chkbox.checked框的值= = true复选框的值= [object HTMLInputElement]

在anddeleted id = 2

的条件下

行已删除!

我的问题是为什么Firefox无法将第2行识别为[object HTMLInputElement]。 我哪里错了? 请帮忙!

2 个答案:

答案 0 :(得分:0)

Firefox和Chrome遵循W3C规范;我相信IE9的行为是一样的。

您的代码依赖于IE&lt; 9跳过由空格组成的文本节点。对于第三行,Firefox,Chrome和IE9为第一个单元格提供两个子节点:包含\n的文本节点(即换行符后跟四个空格)和输入元素。 IE&lt; 9跳过第一个文本节点,因为它纯粹由空格组成。

解决此问题的最简单方法是使用children[0]代替childNodes[0],因为这会产生第一个Element孩子,而不是第一个孩子。

答案 1 :(得分:0)

我看了很多地方,最后来到这个解决方案

            var chkbox = row.cells[0].childNodes[0];
    var ct =chkbox.nodeValue;
    if(/\n^/m.test(ct)) \\ in FIREFOX it will \n+four space so i put a regexp
    chkbox = row.cells[0].childNodes[1];

现在这个工作非常好并且感谢* gsnedders *谁告诉我实际发生了什么事。感谢很多gsnedders