跨浏览器的jQuery .each函数(在ff中工作,ie8,而不是ie7)

时间:2010-02-02 19:51:20

标签: jquery-selectors

我一直在搞乱这个问题太长时间了,并设法让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>

1 个答案:

答案 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号是什么。

这解决了这个问题。