2010-07-16 2 views
2

У меня проблема с моим селектором jQuery. Ниже приведены результаты от Firebug отладчика расслоения плотного:jQuery gt (0) selector issue

$("#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........ 

Некоторые строки в таблице отключены (отмечены атрибутом [отключено = отключено]). Цель моего селектора - связать обработчик кликов с элементами, которые не отключены.

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

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

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

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

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

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

+0

Можете ли вы показать (или ссылку на) разметке? – James

+0

Вы уверены, что ваша разметка действительна? –

+0

Я уверен, что разметка действительна для IE (этот экран работает под IE в течение нескольких месяцев). Теперь я настраиваю его на работу с другими основными браузерами. – Egor4eg

ответ

0

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

+0

Вы имеете в виду $ (" # tblComponentData tr: not ([disabled = инвалиды]) "). GT (0)? В jQuery-1.3.2 нет функции gt() – Egor4eg

0

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

+0

Но он говорит, что первый селектор возвращает 9 и второй 5 в одном браузере. – MDCore

0

Попробуйте

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

Вы должны применять filter