JavaScript: скрыть столбец таблицы ondblclick - PullRequest
1 голос
/ 23 ноября 2011

У меня есть таблица, и я хочу скрыть столбец, когда дважды щелкаю столбец.

Код для сокрытия столбца практически везде.Все, что мне нужно, это подсказка о том, как / где добавить событие ondblclick, чтобы я мог получить идентификатор <td> в <table>.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Вот два решения, которые должны работать. Один сделан с помощью jQuery, а другой только со стандартным Javascript.

http://jsfiddle.net/GNFN2/2/

// Iterate over each table, row and cell, and bind a click handler
// to each one, keeping track of which column each table cell was in.
var tables = document.getElementsByTagName('table');
for (var i = 0; i < tables.length; i++) {
    var rows = tables[i].getElementsByTagName('tr');
    for (var j = 0; j < rows.length; j++) {
        var cells = rows[j].getElementsByTagName('td');
        for (var k = 0; k < cells.length; k++) {
            // Bind our handler, capturing the list of rows and colum.
            cells[k].ondblclick = column_hide_handler(rows, k);
        }
    }
}

// Get a click handler function, keeping track of all rows and
// the column that this function should hide.
function column_hide_handler(rows, col) {
    return function(e) {
        // When the handler is triggered, hide the given column
        // in each of the rows that were found previously.
        for (var i = 0; i < rows.length; i++) {
            var cells = rows[i].getElementsByTagName('td');

            if (cells[col]) {
                cells[col].style.display = 'none';
            }
        }
    }
}

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

http://jsfiddle.net/YCKZv/4/

// Bind a general click handler to the table that will trigger
// for all table cells that are clicked on.
$('table').on('dblclick', 'td', function() {
    // Find the row that was clicked.
    var col = $(this).closest('tr').children('td').index(this);
    if (col !== -1) {
        // Go through each row of the table and hide the clicked column.
        $(this).closest('table').find('tr').each(function() {
            $(this).find('td').eq(col).hide(); 
        });
    }
});
2 голосов
/ 23 ноября 2011

Вы можете сделать это так:

<td ondblclick="this.style.display = 'none';">Some Stuff</td>

Здесь this относится к текущему нажатию td.

Рабочий пример

Чтобы оставаться ненавязчивым, вы можете сделать это легко , используя jQuery, если хотите:

$('#tableID td').dblclick(function(){
  $(this).hide();
});
0 голосов
/ 23 ноября 2011

Из-за отсутствия ответов я нашел обходной путь, который очень уродлив, но работает нормально.

В случае события загрузки окна я решил перебрать таблицу и установить для каждого события onclickчтобы вызвать мою функцию show_hide_column с параметром столбца, установленным из итерации.

window.onload = function () {
  var headers = document.getElementsByTagName('th');
  for (index in headers) {
    headers[index].onclick = function (e) {
      show_hide_column(index, false)
    }
  }
}

show_hide_column - это функция, которую можно легко найти, и код здесь:

function show_hide_column(col_no, do_show) { 
  var stl; 
  if (do_show) stl = 'table-cell' 
  else stl = 'none';

  var tbl  = document.getElementById('table_id');
  var rows = tbl.getElementsByTagName('tr');
  var headers = tbl.getElementsByTagName('th');

  headers[col_no].style.display=stl;

  for (var row=1; row<rows.length; row++) {
    var cels = rows[row].getElementsByTagName('td')
    cels[col_no].style.display=stl;
  }
}

Примечание: в моем html была только одна таблица, поэтому код также предполагает это.Если у вас есть больше столов, вы должны немного повозиться с ним.Также предполагается, что таблица имеет заголовки таблицы ();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...