jQuery gt(0)选择器问题

时间:2010-07-16 09:28:40

标签: javascript jquery jquery-selectors

我的jQuery选择器出了问题。请参阅以下firebug js调试器的结果:

$("#tblComponentData tr:not([disabled=disabled])").length          9
$("#tblComponentData tr:not([disabled=disabled]):gt(0)").length    5

正如您所看到的,这些选择器之间只有一个区别:第二个选择器具有“gt(0)”。但是第二个选择器中的元素数量是5,但是第一个选择器中的元素数量是9。

如果我使用IE,我有有效的结果(第二个选择器提供8个元素)。所以,我无法理解为什么它是可能的。我使用jquery-1.3.2你可以试着帮我这个吗?

我的HTML标记非常简单。请参阅下表中的示例:

<table id="tblComponentData" class="componentConfigurationTable">
<tr style="cursor: auto; background-color: #ffffff; color: #000000">
    <td style="width: 20%">
        <b>First column</b>
    </td>
    <td style="width: 15%">
        <b>Second Column</b>
    </td>
    <td style="width: 30%">
        <b>Third Column</b>
    </td>
    <td style="width: 350px">
        <b>Fourth Column</b>
    </td>
</tr>   
<tr id='665' class='even'
    type='dropdown' order='2' >     
    <td>First value</td>
    <td>Second value</td>
    <td>Third value</td>
    <td style="width: 350px">
        <span class="special">
            </span>&nbsp<span class="error">Test warning</span></td>
</tr>
    etc........

禁用表中的某些行(由属性[disabled = disabled]标记)。我的选择器的目的是将click处理程序绑定到未禁用的元素上。

可以通过javascript动态启用行。因此,我必须从表中的所有行解除绑定处理程序,然后再次使用我的选择器和绑定处理程序。所以,我的选择器运行了很多次。前几次它选择正确的行,但第三次它只选择在前一次选择的元素。这种行为看起来像jQuery缓存选择器,但据我所知它永远不会这样做。

此外,除IE之外的所有浏览器都会出现此问题(我在Firefox,Chrome,Safari和Opera上测试过它)

最后,我通过将“componentDataHeader”类添加到表的第一行来解决此问题 然后使用以下选择器:

$("#tblComponentData tr:not([disabled=disabled]):not(.componentDataHeader)")

它适用于所有浏览器。但是为什么gt(0)不起作用是非常有趣的事。

谢谢, 叶戈尔

3 个答案:

答案 0 :(得分:0)

你试过用.gt(0)链接 - 虽然这应该是相同的......

答案 1 :(得分:0)

我认为这不是jQuery问题,而是DOM问题。 IE中的DOM似乎与FireFox中的DOM不同,这就是它显示错误结果的原因。您是否尝试过检查HTML?

答案 2 :(得分:0)

尝试

$("#tblComponentData tr:not([disabled=disabled])").filter(":gt(0)").length

您必须申请filter