一个IE和FF的JS兼容性问题,寻求解决办法(关于cellIndex)

一个IE和FF的JS兼容性问题,寻求解决办法(关于cellIndex)

问题描述:


<html>
<head>
<title>test</title>
</head>
<body>
<table border="1">
<tr>
<td>0</td>
<td>1</td>
<td style="display:none;">2</td>
<td onclick="alert(this.cellIndex)">3</td>
<td>4</td>
<td>5</td>
</tr>
</table>
</body>
</html>


2号列隐藏,但是导致2种浏览器返回不同的列序号

在ie6/7 下点击3号这列,显示 "2"

在firefox3 下点击, 显示 "3"

我希望是ff结果

由于这个差异直接导致我做的一个复杂表格控件不能在ie下正常使用,现在临时写了js去遍历计算自己在第几列让2个浏览器相同得到"3",但效率极底,期待有高效的解决办法,特发帖询问各位达人。





test























0 1 2 3 4 5






function getCellIndex(o){
for(var i =0,obj = o.parentNode.childsNodes;i < obj.length;i++){
if(o == obj[i]) return i;
}

}

不知道如何解决。ie下只能遍历了,要性能或者二分。

如果是整列控制隐藏,可以考虑用列控制标签

来对应控制

如果是非整列控制,则根据需求来定了。

另外,非常BT的是:IE7-中表格单元格的cellIndex,居然是根据表格布局流中的占位来确立索引值的,你可以试一下对单元格应用样式:


一样会出现cellIndex属性的紊乱。

在这种情形下,其cellIndex属性值会自动调整为该行所在的未产生cellInde紊乱的单元格集合的长度。但其所在行的cells集合的长度属性length值不变。

例如:一行中有10列单元格,其中有5列会因为样式设置导致在表格布局流中不占位,它们的cellIndex属性都会自动调整为一样的值——5。