JQuery GT (0) проблема выбора - PullRequest
2 голосов
/ 16 июля 2010

У меня проблема с моим селектором jQuery.Ниже приведены результаты отладчика firebug js:

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

Как видите, между этими селекторами есть только 1 различие: второй селектор имеет "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]).Цель моего селектора - привязать обработчик щелчков к элементам, которые не отключены.

Строки могут быть включены динамически с помощью javascript.Поэтому мне нужно отменить привязку обработчика щелчка по всем строкам таблицы, а затем снова использовать мой селектор и обработчик привязки.Итак, мой селектор запускается много раз.Первые пару раз он выбирает правильные строки, но в третий раз выбирает только элементы, которые были выбраны в предыдущий раз.Такое поведение выглядит как селектор кэшей jQuery, но, насколько я знаю, он никогда этого не делает.

Кроме того, эта проблема возникает во всех браузерах, кроме IE (я тестировал его на Firefox, Chrome, Safari и Opera)

Наконец, я исправил эту проблему, добавив класс "componentDataHeader" в первую строку таблицы, а затем использовал следующий селектор:

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

Он работает правильно во всех браузерах.Но довольно интересно, почему gt (0) не работает.

Спасибо, Егор

Ответы [ 3 ]

0 голосов
/ 16 июля 2010

Я не думаю, что это проблема jQuery, но проблема DOM. DOM в IE выглядит иначе, чем в FireFox, поэтому он показывает неверные результаты. Вы пытались проверить свой HTML?

0 голосов
/ 27 июля 2012

Попробуйте

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

Вы должны подать заявку filter

0 голосов
/ 16 июля 2010

вы пробовали цепочку с .gt(0) - это должно быть то же самое, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...