#javascript #datatables
Вопрос:
Я хотел бы попросить идеи о том, как получить максимальное число из определенного столбца и вернуть значок в другом столбце. Я использую rowCallback, поэтому, если есть максимальное число, статус изменится на активный(галочка), а остальные будут отмечены крестиком.
Вот мой код:
"rowCallback": function(row, data, num ) {
if(parseInt(data["num"]) === max ){
$('td:eq(3)', row).html('<a class="btn btn-link btn-success btn-just-icon btn-round"><i class="material-icons">check</i>');
}
else{
$('td:eq(3)',row).html('<a class="btn btn-link btn-danger btn-just-icon btn-round"><i class="material-icons">highlight_off</i>');
}
},
Ответ №1:
- В идеале (если у вас есть доступ к данным до создания HTML-кода), вы должны один раз вычислить максимальное значение этого столбца и передать его скрипту.
- Если вы не можете этого сделать и вам нужно оставаться в JS, то API DataTables имеет метод .column, который вы можете использовать для извлечения данных. Так что вы можете сделать что-то вроде этого:
var table = $('#example').DataTable(); // adjust a neccessary to get your table
var max = table
.column( 2 )
.data()
.reduce( function (a,b) {
return Math.max(a,b);
} );
Комментарии:
1. спасибо вам за ваш ответ. Можете ли вы показать мне, как это реализовать? Я предпочитаю вариант 2. Извините, действительно потерял прямо сейчас, впервые делаю такую реализацию на странице. Итак, могу ли я добавить его в свой rowcallBack? вот так? «Обратный вызов строки»: функция(строка, данные, число ) { var max = таблица 1 .столбец(2) .данные() .уменьшить( функция (a,b) { возвращает математический максимум(a,b); } ); если(синтаксический анализ(данные[«число»]) === макс ){ } остальное{ } },
2. Конечно, я был бы рад помочь вам в этом, но вы не предоставили много информации, чтобы помочь в этом 😉 Ваш код выглядит как код, но, возможно
column(2)
, его нужно скорректировать — это предполагает, что в 3d — столбцах есть данные, которые нас интересуют. Это индекс на основе 0, поэтому проверьте, нужно ли его обновлять (как я думаю, это будет)…3. Я уже понял это. Я опубликую свой ответ позже