Скрытие столбцов в таблице

193
20 декабря 2017, 23:33

Таблица

<table border="1" id="table">
  <tr>
   <td>0</td>
   <td>1</td>
   <td>2</td>
  </tr>
  <tr>
   <td>0</td>
   <td>1</td>
   <td>2</td>
  </tr>                            
</table>

при нажатие на checkbox скрывается столбец

<input name="column" type="checkbox" value="0" onClick="toggle_column('table', this.value);" checked />
<input name="column" type="checkbox" value="1" onClick="toggle_column('table', this.value);" checked />
<input name="column" type="checkbox" value="2" onClick="toggle_column('table', this.value);" checked />

scrypt

 function toggle_column(table, column_nr) {
        table = document.getElementById('table');
        rows = table.getElementsByTagName('tr');
        for (var row=0; row<rows.length;row++) {
            cels = rows[row].getElementsByTagName('td');
            cels[column_nr].style.display=cels[column_nr].style.display=="none" ? "" : "none";
        }
    }

Можно ли как то сделать что бы скрывались столбцы не по value, а по id или class, хочу применить к таблице такого вида

<table  class="table table-bordered table-hover">
     <thead>
      <tr>
        <th><?php echo $text_price ?></th>
        <th><?php echo $text_comment?></th>
       </tr>
      </thead>
      <tbody>
      <?php foreach ($orders as $order) { ?>
        <tr>
          <td><?php echo $order['comment']?></td>
        </tr>
       <?php } ?>
      </tbody>
  </table>
Answer 1

Можете назначить ячейкам классы и по ним скрывать. А в чекбоксах хранить названия этих классов.

Лучше отслеживать событие 'change' для чекбоксов. И использовать CSS для скрытия колонки.

const controls = document.getElementById('controls'); 
controls.addEventListener('change', e => { 
  toggleColumn(e.target.dataset.columnClass); 
}); 
 
function toggleColumn(columnClass) { 
	const cells = document.querySelectorAll(`.${columnClass}`); 
   
  cells.forEach(cell => { 
  	cell.classList.toggle('hidden'); 
  }); 
}
.hidden { 
  display: none; 
}
<table border="1" id="table"> 
  <thead> 
    <tr> 
      <th class="col-1">Цена</th> 
      <th class="col-2">Комментарий</th> 
    </tr> 
  </thead> 
  <tbody> 
    <tr> 
     <td class="col-1">200</td> 
     <td class="col-2">БУ</td> 
    </tr> 
    <tr> 
     <td class="col-1">500</td> 
     <td class="col-2">Новый</td> 
    </tr> 
  </tbody> 
</table> 
 
<div id="controls"> 
  <input type="checkbox" data-column-class="col-1" checked> 
  <input type="checkbox" data-column-class="col-2" checked> 
</div>

READ ALSO
Скрипт не работает на айфонах

Скрипт не работает на айфонах

Почему данный скрипт не работает на айфонах?

187
Web авторизация по smart-card (смарт картам)

Web авторизация по smart-card (смарт картам)

Необходимо реализовать авторизацию в веб прилажении (Symfony 3x) по smart-card (смарт картам), подскажите как это можно реализовать? Может есть уже...

167
Как сделать карточки аватарок как на картинке?

Как сделать карточки аватарок как на картинке?

Как сделать карточки аватарок как на картинке?Не получается создать пустое место на правой стороне для картинок

170
Ошибка при запуске теста Selenium

Ошибка при запуске теста Selenium

Пытаюсь разобраться в автоматическом тестировании web-приложенийУстановил пока только NodeJS

227