我无法获得一行的价值,因为它提供了Object Text(在FireFox和Chrome中),因为它应该是Object HTMLInputElement(在IE中)。 这在IE中运行顺利,但在Firefox中没有。
HTML code:
<table id="mode">
<tr class="jnclisthdrrow">
<td class ="jnclistcenter"> </td>
<td class ="jnclistcenter">Rank</td>
<td class ="jnclistcenter">Mode</td>
</tr>
<tr>
<td class ="jnclistcenter"> </td>
<td class ="jnclistcenter"> </td>
<td class ="jnclistcenter"> </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]。 我哪里错了? 请帮忙!
答案 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