先不废话 代码如下:

<html>
 <head>
<script type="text/javascript" >

function init(){

var tab0=document.getElementById('tab0');

	var tr1=document.getElementById('tr1');

	var td3=document.getElementById('td3');

	var idx_tr1=tr1.rowIndex;

	var idx3= td3.cellIndex;



	alert( tab0.tBodies[0].rows[idx_tr1].id  + '\n'+ tr1.cells[idx3].id );

}
</script>
 </head>
 <body onload="init()">
  <table id="tab0" border="1" width="300">
  <tr id="tr0" style="display:none;"><td>.</td><td>.</td><td>.</td><td>.</td><td>.</td></tr>
  <tr id="tr1">
  	<td id="td0">0</td>
	<td id="td1">1</td>
	<td id="td2" style="display:none;">2</td>
	<td id="td3">3</td>
	<td id="td4">4</td>
  </tr>
  </table>
 </body>
</html>



运行后

ie里提示 tr1 td2

ff safari opera下都提示  tr1 和 td3

---------------------------------

总结: 也就是说 在IE里 ,当table中有隐藏的td时 , cellIndex这个属性不再可靠.
但是 当table中有隐藏的tr时 , rowIndex这个属性依然是可靠的.

ie里对 td 隐藏后的 ,在计算 cellIndex时 会当作那个隐藏的td被移除了一样计算
但是 tr的cells集合内却并没有移除那个隐藏的td.

IE的做法实在是 让人无语了
评论
tomoya 2008-09-03
好像IE会把display=none的cell的cellIndex排在最后,而cells[]数组的内部顺序却不会因为display属性而改变,是按照页面上的位置决定的,两者不一致。
fins 2008-04-07
按ms的说法,如下

http://support.microsoft.com/kb/814506

似乎ms并不认为这是一个bug
ms同时提供了一个他们的解决方案:

引用
自动修复程序包安装以下注册表项具有 REG _ DWORD 值为 1:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main Count Hidden Table Cells



ray_linn 的 ie注册表里是不是正好有这项啊??
fins 2008-04-06
楼上的确实没有出现这个问题?

你确定是运行我主贴里的代码后 在IE提示的也是  tr1 和 td3 ?

那就奇怪了

你能不能说一下你的ie版本

因为这个bug已经在几十台机器上测试过 ,确实存在了.
ray_linn 2008-04-06
我的IE下好好的,大概是你RP的问题..
Quake Wang 2008-04-02
这是一个很"著名"的老问题
我最初是在webfx的sortable table的脚本里面遇到的,然后他们也采用了和你类似的方法进行了修复:
引用
| 2003-07-04 | Added workaround for IE cellIndex bug.


this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);

// IE returns wrong cellIndex when columns are hidden
SortableTable.getCellIndex = function (oTd) {
	var cells = oTd.parentNode.childNodes
	var l = cells.length;
	var i;
	for (i = 0; cells[i] != oTd && i < l; i++)
		;
	return i;
};


没有想到IE现在还是有这个bug
kaipingk@gmail.com 2008-04-02
微软的东西多又杂,自己实现的东西给外行人看什么都有,什么都可以做,当细细的用它的东西时候会发现很多莫名其妙的不一致的东西,实在是郁闷。
unifly 2008-04-02
微软的伙计干事情也太不严谨了吧,建议将此bug发给IE开发组……
fins 2008-04-02
为解决这一问题,写了一个方法:


	getCellIndex : function(td){
		if (GT.isIE){
			var cells=td.parentNode.cells;
			for (var i=0,j=cells.length;i<j;i++ ){
				if (cells[i]===td){
					return i;
				}
			}
		}
		return td.cellIndex;
	},
发表评论

您还没有登录,请登录后发表评论