一个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
function getCellIndex(o){
for(var i =0,obj = o.parentNode.childsNodes;i < obj.length;i++){
if(o == obj[i]) return i;
}
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下只能遍历了,要性能或者二分。
答
一样会出现cellIndex属性的紊乱。
如果是整列控制隐藏,可以考虑用列控制标签
来对应控制如果是非整列控制,则根据需求来定了。
另外,非常BT的是:IE7-中表格单元格的cellIndex,居然是根据表格布局流中的占位来确立索引值的,你可以试一下对单元格应用样式:
一样会出现cellIndex属性的紊乱。
在这种情形下,其cellIndex属性值会自动调整为该行所在的未产生cellInde紊乱的单元格集合的长度。但其所在行的cells集合的长度属性length值不变。
例如:一行中有10列单元格,其中有5列会因为样式设置导致在表格布局流中不占位,它们的cellIndex属性都会自动调整为一样的值——5。