Документация DataTables для columns().every()
Each() https://datatables.net/reference/api/columns().every():
Этот метод columns(). Every() устанавливает контекст функции обратного вызова как экземпляр column() для рассматриваемого столбца.
Однако в приведенном ниже коде с двумя таблицами this
всегда относится к первой таблице, даже если итерация через столбцы второй таблицы. Он не устанавливает класс во второй таблице. Вместо этого он дважды устанавливает его в первую таблицу. Что я делаю неправильно? Или как я могу решить это элегантно?
<!DOCTYPE html>
<html>
<title>DataTables test</title>
<link rel="stylesheet" href="//cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.css">
<style>
.bgcolor {
background-color: red;
}
</style>
<script src="//code.jquery.com/jquery-3.2.1.js"></script>
<script src="//cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script>
<table>
<thead><tr><td>Head
<tbody><tr><td>Cell in first table
</table>
<table>
<thead><tr><td>Head
<tbody><tr><td>Cell in second table
</table>
<script>
$(function() {
var tables = $('table').DataTable();
tables.columns().every(function(columnIndex, tableCounter) {
var nodes = this.nodes();
$(nodes).addClass('bgcolor');
});
});
</script>
Это потому, что ваш селектор - это просто "таблица".
Рассмотрим идентификацию каждой из ваших таблиц, а затем примените правильный селектор:
....<table id="example2">....
А потом:
$('#example2').DataTable(.....
См. Обновленную скрипту: https://jsfiddle.net/a3j6zv62/1/
ОБНОВИТЬ:
Чтобы сделать это во всех таблицах вашего документа, просто используйте несколько циклов jquery:
$('table').DataTable({dom: 't'});
$('table').each(function() {
var api = $(this).dataTable().api();
api.columns().every(function(columnIndex, tableCounter) {
var nodes = this.nodes();
console.log([columnIndex, tableCounter, nodes]);
$(nodes).addClass('bgcolor');
});
});
См. Также обновленную скрипту https://jsfiddle.net/a3j6zv62/3/