我一直在搞乱这个问题太长时间了,并设法让IE8工作,但IE7让我感到难过。
我有一张桌子,对于每一栏,我试图提取一些div。我只提取与特定选择器匹配的div,而不是列中的所有div。 我原来的jquery选择器是
jQuery('div.a1, div.a3, div.a4, div.a7','table#a'+tableId+' td:nth-child('+columnNum+')').each(function(){ alert(jQuery(this).attr('id')); });
这在FF中运行良好,但在IE中根本没有触发.each功能。
在搞砸了一下之后,我得到了
jQuery('td:nth-child('+columnNum+') > div.a1, td:nth-child('+columnNum+') > div.a3, td:nth-child('+columnNum+') > div.a4,td:nth-child('+columnNum+') > div.a7', table#a+'tableId).each(function(){ alert(jQuery(this.attr('id')); });
不太好,但适用于IE8。 我曾尝试使用.eq(+'columnNum +')进行各种组合,但没有其他工作正常。
现在我去测试IE7,再次没有触发.each。
使用这种.each元素的最佳方法(和跨浏览器兼容)是什么?
--------------此外--------------
在进一步测试并玩弄DrJ和bdukes的建议后,我发现表#'+ tableId在IE7和8中都破坏了这个功能。
我已经回到我原来的代码
了jQuery('div.a1, div.a3, div.a4, div.a7','table#a'+tableId+' td:nth-child('+columnNum+')').each(function(){ alert(jQuery(this).attr('id')); });
因为在我看来效率最高。 如果我删除'table#a'+ tableId,我会在所有浏览器中得到正确的响应,除了它是从所有表中添加结果,我需要一次只能从一个表中获得结果。 我也试过'table#a'+ tableId +'> td:nth-child('+ columnNum +')')。每个,但这也不起作用。
我使用的第一个功能在firefox中完美运行。
----------------正在选择html --------------------------- 这些表是在javascript中动态创建的,所以我无法真正复制并通过它,但这是输出的样子。最终看起来有点像桌上的甘特图。
<table id="a1"> <tr> <th colspan="5"> Group Name </th> </tr> <tr class="rowId1" > <td> <div class="a1" id="a43" style="margin-left:13px; width:60px" ></div> </td> <td> </td> <td> <div class="a3" id="a93" style="margin-left:4px; width: 80px" ></div> <div class="a2" id="a94" style="margin-left:4px; width: 30px" ></div> </td> <td> <div class="a1" id="a24" style="margin-left: 15px; width: 65px;" ></div> </td> <td> </td> </tr> </tr> <tr class="rowId1" > <td> <div class="a7" id="a24" style="margin-left:10px; width:60px" ></div> </td> <td> <div class="a2" id="a15" style="margin-left:14px; width: 22px" ></div> </td> <td> ; <div class="a2" id="a105" style="margin-left: 8px; width: 50px" ></div> </td> <td> </td> <td> <div class="a4" id="a102" style="margin-left: 5px; width: 45px;" ></div> </td> </tr> </table>
答案 0 :(得分:1)
事实证明,当两个不同的元素具有相同的ID时,这是IE失败的问题。显然这打破了.each函数。
我有两张桌子 table.notes#a1&amp; table.inputs#a1.each函数应该遍历每个表但是却找不到。
jQuery也不会在
中运行jQuery('div.a1, div.a3, div.a4, div.a7','table.inputs#a'+tableId+' td:nth-child('+columnNum+')').each(function(){ alert(jQuery(this).attr('id')); });它本应该完成的,因为即使id不是唯一的,我也直接指向特定的表。
我正在使用从数据库中检索到id的id,而IE不喜欢以数字开头的id,所以我只是在id的开头添加了'a'。 然而,它显然也不喜欢这样,所以现在我添加了类的第一个字母,然后是'1'或者id号是什么。
这解决了这个问题。