Я думал, что на этот вопрос ответили бы, но я не могу решить это. Попробовал:
Я использую DataTables 1.10.16 в режиме serverSide
- мои данные загружаются через ajax, а не при загрузке страницы.
Моя разметка - это просто таблица с идентификатором, #substancesTable
:
<table id="substancesTable" cellspacing="0" width="100%">
<thead>
<tr>
<th>ID</th>
<th>EC</th>
<th>CAS</th>
<th>Name</th>
</tr>
</thead>
</table>
JS для загрузки данных выглядит следующим образом:
var substancesTable = $('#substancesTable').DataTable({
"processing": true,
"serverSide": true,
"searching": false,
"ajax": {
"url": "/get-substances.json",
"dataSrc": function (json) {
return json.data;
}
}
});
Это отлично заполняет мой стол. У меня есть обработчик событий, такой, что когда пользователь вручную нажимает на строку (любой элемент <td>
внутри #substancesTable
), он делает дополнительный запрос AJAX, чтобы получить больше данных, которые затем заполняются внутри <td>
, что пользователь щелкнул. Этот код также отвечает за закрытие / свертывание любых открытых строк:
$('#substancesTable tbody').on('click', 'td', function () {
var tr = $(this).closest('tr');
var row = substancesTable.row( tr );
if ( row.child.isShown() ) {
row.child.hide();
tr.removeClass('shown');
}
else {
row.child( expand_substance(row.data()) ).show();
tr.addClass('shown');
}
} );
Приведенный выше код вызывает функцию expand_substance
, которая обрабатывает упомянутый запрос ajax. Это все отлично работает.
Я пытаюсь найти способ программно открывать определенные строки. Под этим я подразумеваю массив идентификаторов строк, на которые нажал пользователь, например,
var openRows = [5, 6, 8, 33, 100];
Данные этого массива будут храниться в Redis (кеше), поэтому, если пользователь уходит со страницы, когда он возвращается, данные в openRows
будут загружены, и я хочу открыть соответствующие строки. Но я не знаю, как заставить DataTables открывать строки 5, 6, 8, 33, 100 и т. Д.
Ссылки выше, похоже, не работают для меня. Например, если я попытаюсь:
substancesTable.row(':eq(0)', { page: 'current' }).select();
Я получаю консольную ошибку:
VM308:1 Uncaught TypeError: substancesTable.row is not a function
Я не уверен, что это как открыть строку, но не смог найти больше информации, которая помогла.
Итак, возможно ли использовать JavaScript для открытия определенных строк таблицы на основе массива известных идентификаторов (openRows
)?