2009-09-18 2 views
14

Я взял таблицу html, в которой я применяю альтернативные цвета строк, и я добавил сортировщик таблицы jquery на нем, чтобы пользователи могли сортировать таблицу.плагин jquery tablesorter - сохранить альтернативные цвета строк

Проблема в том, что альтернативные цвета строк теперь перепутаны, поскольку (на основе сортировки) имеется несколько строк с тем же цветом фона.

Есть ли способ сбросить альтернативный цвет строки с помощью сортировщика таблицы jquery?

+0

Я считаю, самый простой способ это просто сканировать через таблицу после завершения сортировки и чередовать имя класса для надлежащего L & F. –

+0

Я не буду следовать за вами здесь. похоже, что jquery выполняет все сортировки, поэтому, где вы получаете «крючок», чтобы войти и сбросить таблицу – leora

+0

Могу ли я предложить другой компонент таблицы вместо jquery tablesorter? –

ответ

48

Существует уже виджет по умолчанию zebra, встроенный в ядро, который применяет классы odd и even для чередования строк. Он работает независимо от того, добавили ли вы class=even/odd в html-файл.

Это действительно легко настроить. Я просто следовал инструкциям на table sorter website, а затем модифицировали документ готовую функцию следующее:

<script type="text/javascript"> 
$(document).ready(function() 
    { 
     $("#myTable").tablesorter({ 
    widgets: ['zebra'] 
    }); 
    } 
); 
</script> 

я сделал пример, отвечая на вопрос. Вы можете view the result in action, или see the example code.

1

Как насчет:

function fixStripes() { 
    var i = 0; 
    var rowclass; 
    $("table tr").each(function() { 
      $(this).removeClass("odd even"); 
      rowclass = (i%2 == 1) ? "odd" : "even"; 
      $(this).addClass(rowClass); 
     }); 
} 

$("table").bind("sort", fixStripes); 

Да, и если вы хотите действительно простое исправление, вы можете задержать дыхание для этого CSS псевдо-класса, чтобы получить подхвачена всеми основными браузерами:

table tr:nth-child(n+1) { 
    color: #ccc; 
} 

Но моя догадка основана на том, как FF и компания обрабатывают CSS для динамического HTML, он будет устанавливать ваши полосы на нагрузке, но не применять CSS после сортировки. Но я хотел бы точно знать.

+0

Думаю, вам также понадобится '$ (this) .removeClass ('odd even')', чтобы убедиться, что каждая строка сбрасывается правильно. – dcrosta

+0

Я просто понял это! Я вернулся к редактированию. хорошо выглядишь. – Anthony

6

На основании ответа Энтони, но перефразировать как однострочника (в основном):

function fixStripes() { 
    $('table tr').removeClass('odd even') 
     .filter(':even').addClass('even').end() 
     .filter(':odd').addClass('odd'); 
} 

$("table").bind("sort", fixStripes); 

JQuery вызовы могут быть «прикован», как описано выше, используя операции, такие как filter() ограничить выбранные элементы и .end() в «сбросить» до последнего выбора. Иными словами, каждый .end() «отменяет» предыдущий .filter(). Окончательный .end() оставлен, так как после этого нечего делать.

+0

Это должно быть '$ ('table tr')' – Anthony

+0

Совершенно верно, спасибо за улов. – dcrosta

+1

BTW, tablesorter теперь, кажется, вызывает sortStart и sortEnd, а не просто сортировку. –

5

Для сохранения полос зебры после сортировки необходимо снова вызвать виджет зебры.

$('#myTable') 
.tablesorter({ widgets: ['zebra'] }) 
.bind('sortEnd', function(){ 
    $("#myTable").trigger("applyWidgets"); 
}); 

Это меньше рубить, как вы будете повторно использовать логику зебры виджета, а не копировать его.

Примечание: Этот вид работы необходим только в тех случаях, когда виджет по умолчанию zebra не работает. В большинстве случаев я обнаружил, что этот хак не требуется, так как виджет работает корректно.

+0

+1 Для рабочего решения –

1

Пересмотренный и Последний рабочий раствор - встроенный * Это также даст возможность изменения цвета на мыши. *

<script type="text/javascript"> 
    $(document).ready(function() { 

    $('#tblLookupResult').tablesorter({ widthFixed: true, sortList: [[0, 0], [0, 1], [0, 2]], theme: 'blue', widgets: ['zebra'] }) 
          .tablesorterPager({ container: $("#pager"), size: $(".pagesize option:selected").val() }); 

    $('#tbltable1 tbody tr').live('click', function() {    
        if ($(this).hasClass('even')) { 
         $(this).removeClass('even'); 
         $(this).addClass('ui-selected'); 
        } 

        else if ($(this).hasClass('odd')) { 
         $(this).removeClass('odd'); 
         $(this).addClass('ui-selected'); 
        } 
        else { 
         $(this).removeClass('ui-selected'); 
         $(".tablesorter").trigger("update"); 
         $(".tablesorter").trigger("applyWidgets");       
        } 

     }); 

    }); 
</script> 

Теперь все должно пнуть себя вне!

+0

Спасибо, thetrigger ("update"); это то, что я искал. – Lucretius

0

Через ваши CSS:

table.tablesorter tr:nth-child(even) { 
     background-color: #ECFAFF; 
    } 
Смежные вопросы