Sorttable.js (сортировка таблиц Javascript) не работает при создании таблицы в javascript

Я пытаюсь использовать пакет sorttable.js для сортировки таблицы HTML при нажатии на заголовок столбца. Я могу заставить это работать нормально, когда таблица объявлена ​​статически в HTML:

играть на скрипке

<table class="sortable" style="width:100%">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Points</th>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
    <tr>
    <td>Joe</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
    <tr>
    <td>Abraham</td>
    <td>Jones</td> 
    <td>4</td>
  </tr>
</table>

Однако, когда я создаю таблицу с помощью javascript, функции сортировки больше нет, и я получаю сообщения об ошибках на консоли:

играть на скрипке

  tbl_array = new Array()
  tbl_array = [["Firstname","Lastname","Points"], ["Eve","Jackson","94"], ["Joe","Smith","50"], ["Abraham","Jones","4"]]
  var body = document.body,
        tbl = document.getElementById('summaryTable');

    // clear all rows on the table
    while(tbl.rows.length > 0){
        tbl.deleteRow(0)
    }
    tbl.style.width  = '100px';
    tbl.style.border = '1px solid black';

    numRows = tbl_array.length
    numCols = tbl_array[0].length

    // insert each 2D array entry into a table cell
    for(var i = 0; i < numRows; i++){

    // insert header
    if (i == 0){
        var header = tbl.createTBody();
        var row = header.insertRow();
            for (var j=0; j < numCols; ++j){
            var cell = document.createElement('th')
            cell.appendChild(document.createTextNode(tbl_array[i][j]));
            cell.style.border='1px solid black';
            cell.style.fontWeight = "bold";
            row.appendChild(cell)
          }
    }

    else{
      var tr = tbl.insertRow();
      for(var j = 0; j < numCols; j++){
          var td = tr.insertCell();
          td.appendChild(document.createTextNode(tbl_array[i][j]));
          td.style.border = '1px solid black';
      }
    }
    }
  console.log("tbl", tbl) 

Единственное, о чем я могу думать, это то, что я неправильно форматирую таблицу с помощью javascript, но когда я печатал обе таблицы на консоли и проверял их структуры, они были в основном одинаковыми:

<table ...>
    <tbody>
        <tr ...>
            <th>..</th>
            <th>..</th>
        </tr>
        <tr>
            <td>..</td>
            <td>..</td>
        </tr>
    </tbody>
</table>

Моя ошибка в том, как я создаю таблицу с помощью JavaScript? Любая помощь будет оценена. Спасибо!

1 ответ

Решение

sorttable.js предполагает, что все таблицы уже находятся в HTML при инициализации; ваша таблица генерируется динамически, поэтому вы должны makeSortable метод вручную.

Прямо перед вашим console.logпопробуйте вставить это:

sorttable.makeSortable(document.getElementById('summaryTable'));
Другие вопросы по тегам