Я пытаюсь использовать пакет 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? Любая помощь будет оценена по достоинству. Спасибо!

4
CdSdw 28 Июн 2016 в 22:47
В первом есть thead и tbody, а во втором - только tbody. Также подумайте о том, как сортируется таблица - есть только некоторые js, которые запускаются и ищут class = sortable и делают его сортируемая таблица. Поскольку ваш код запускается после этого, вам необходимо выполнить ту же инициализацию.
 – 
freedomn-m
28 Июн 2016 в 22:59

1 ответ

Лучший ответ

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

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

sorttable.makeSortable(document.getElementById('summaryTable'));
3
SteamDev 28 Июн 2016 в 22:55