2013-08-12 3 views
0

У меня есть таблица, в которой я хотел бы динамически скрыть/показать строки, основанные на флажках вверху.Флажки скрывают группы строк из таблицы

Я хотел бы сделать это без jQuery, просто ваниль Javascript.

Я видел множество методов на этом сайте и другие, но всегда фрагменты кода, а не полные рабочие примеры.

Я не хочу давать каждой строке отдельное имя div или что-то еще, я предполагаю, что я могу сделать это с помощью обычного класса для трех типов строк, которые я хочу скрыть/открыть.

Может ли кто-нибудь показать мне рабочий пример, который позволяет флажкам скрывать/показывать несколько строк из таблицы с помощью ванильного Javascript?

+0

С каким HTML вы работаете? Как/должен ли конкретный флажок привязываться к определенной строке? –

+0

Как и в моем примере к приведенному ниже ответу, есть ... скажем .. 200 команд, некоторые из которых являются «северными» командами, некоторые из которых «Юг», а некоторые из них - команды «Вне графства». Список сортируется по убыванию по общей сумме, независимо от того, в какой группе находится группа. Я хочу, чтобы 3 флажка могли добавлять/удалять строку из этих групп команд в зависимости от того, что хочет видеть конечный пользователь.Таким образом, они могут сравнивать команды своих регионов друг против друга. Что-то в этом роде. – user2675370

ответ

1

Учитывая HTML вроде следующего:

<table> 
    <thead> 
     <tr> 
      <td> 
       <label> 
        <input type="checkbox" class="show" value="north" checked />North</label> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <label> 
        <input type="checkbox" class="show" value="south" checked />South 
       </label> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <label> 
        <input type="checkbox" class="show" value="outOfArea" checked />Out of area 
       </label> 
      </td> 
     </tr> 
    </thead> 
    <tbody> 
     <tr class="north"> 
      <td>North One</td> 
     </tr> 
     <tr class="north"> 
      <td>North Two</td> 
     </tr> 
     <tr class="outOfArea"> 
      <td>Out-of-area One</td> 
     </tr> 
     <tr class="south"> 
      <td>South One</td> 
     </tr> 
     <tr class="south"> 
      <td>South Two</td> 
     </tr> 
     <tr class="north"> 
      <td>North Three</td> 
     </tr> 
     <tr class="north"> 
      <td>North Four</td> 
     </tr> 
     <tr class="south"> 
      <td>South Three</td> 
     </tr> 
     <tr class="outOfArea"> 
      <td>Out-of-area Two</td> 
     </tr> 
    </tbody> 
</table> 

Следующая JQuery, кажется, делает, как вы , кажется описать:

$('thead input[type=checkbox]').change(function(){ 
    var self = this; 
    $(self).closest('table').find('tbody tr').filter('.' + self.value).toggle(self.checked); 
}); 

JS Fiddle demo.

Как мне кажется, что вы предпочли бы подход равнинно-JavaScript, я хотел бы предложить следующее (для работы на тот же HTML, как писал выше):

function toggle (e) { 
    var self = e.target, 
     toggleClass = '.' + self.value, 
     toToggle = document.querySelectorAll(toggleClass); 
    for (var i = 0, len = toToggle.length; i < len; i++) { 
     toToggle[i].style.display = self.checked ? 'table-row' : 'none'; 
    } 
} 

var thead = document.querySelector('thead'); 
thead.addEventListener('change', toggle); 

JS Fiddle demo.

Ссылки:

+0

Выглядит отлично на jsfiddle, спасибо! Кажется, я что-то упускаю, но с js. Я помещал его в .. но что заставляет его начинать? Я сделал некоторую onload = но не очень. Я действительно не знаю javascript, но у меня есть кое-что, чтобы хорошо работать с веб-примерами. – user2675370

+0

Проверка/снятие флажка «ввод» должна «начать». Хотя это предполагает, что вы используете современный браузер? Это, безусловно, должно работать в Firefox, Chrome и Opera. Я не уверен, когда, или если IE начал реализовывать 'addEventListener()'. Конечно, вам нужно, чтобы DOM присутствовал/строился до привязки событий к узлам DOM, поэтому лично я бы обернул его в тег 'script' (как вы) и поместил этот тег' script' непосредственно перед ' '(закрытие). –

+0

Отлично, спасибо! – user2675370

0

Похоже вы описываете что-то вдоль линий this example

+0

Если вы ссылаетесь на внешний ресурс по крайней мере *, было бы полезно, если бы вы могли обобщить ресурс, на который вы ссылаетесь, в своем ответе. Stack Overflow предназначен для автономной работы и содержит полезные ответы/код в ответах/вопросах. Ссылки отлично подходят для ссылок на дополнительные ресурсы, ссылки и демонстрации кода в действии, но ответ должен иметь возможность существовать без них (для защиты от гниения и реорганизации сайта). –

+0

Я понимаю, что вы говорите, его вопрос был для рабочего примера. Я понимаю, что мог бы разделить этот пример и объяснить его, и, возможно, мне следовало бы это сделать. –

+0

Это отлично работает для отдельных строк, но я ищу для него управление группами строк, которые не сортируются по группам. Например, список команд в сборщике средств, где я хочу включить/отключить показ команд «Северная сторона», «Южная сторона» и команды «Вне графства». это итоговая страница, отсортированная по убыванию, поэтому South Side может захотеть увидеть, как они делают друг против друга, а не против других команд, смешанных там. – user2675370

Смежные вопросы