Повторите таблицу полосания после сокрытия строк (Twitter Bootstrap)

Я использую Bootstrap и имею полосатую таблицу, которую можно отфильтровать, выбрав некоторые параметры в форме. Javascript интерпретирует входные данные формы и скрывает строки из таблицы, которые не соответствуют выбранным критериям.

Однако это разбивает таблицу на таблицу в зависимости от того, какие строки скрыты (серые строки рядом с серыми строками, белые строки следующие белые строки).

Я хотел бы повторно применить разбивку на основе того, какие строки видны после фильтрации результатов. Как я могу это сделать?

Использование .remove() в строках таблицы не является опцией, потому что мне может потребоваться показать их снова, если меняются критерии фильтра, и я пытаюсь избежать использования AJAX для динамического обновления таблицы на основе входных данных фильтра ( Я хотел бы придерживаться скрытия элементов DOM).

Любая помощь приветствуется! Я могу уточнить вопрос, если необходимо:)

Ответы

Ответ 1

Да, это определенно одна из раздражающих частей таблицы. Лучшая часть доблести здесь, вероятно, только для того, чтобы повторно использовать чередование с jQuery после каждого обновления:

$("tr:not(.hidden)").each(function (index) {
    $(this).toggleClass("stripe", !!(index & 1));
});

Ответ 2

Ответ Энтони не сработал у меня. Во-первых, он не скрывает класс таблицы Bootstrap table-striped, а во-вторых, нет (или, по крайней мере, не является) встроенным классом stripe для строк таблицы.

Здесь мой подход, где я фильтровал строки в таблице с идентификатором "отчетов".

Здесь используется версия, если вы определяете класс "stripe" для элементов <tr>:

// un-stripe table, since bootstrap striping doesn't work for filtered rows
$("table#reports").removeClass("table-striped");

// now add stripes to alternating rows
$rows.each(function (index) {
  // but first remove class that may have been added by previous changes
  $(this).removeClass("stripe");
  if ( index % 2 == 0) {
    $(this).addClass("stripe");
  }
});

Если вы слишком ленивы, чтобы определить класс CSS "stripe", то здесь быстрая и грязная версия:

// un-stripe table, since bootstrap striping doesn't work for filtered rows
$("table#reports").removeClass("table-striped");

// now add stripes to alternating rows
$rows.each(function (index) {
  // but first remove color that may have been added by previous changes:
  $(this).css("background-color", "inherit");
  if ( index % 2 == 0) {
    $(this).css("background-color", "#f9f9f9");
  }
});