У меня есть код для проверки даты истечения срока действия, когда строка с истекшим сроком действия меняет цвет фона, например
успех, если срок действия истек
но когда я вставляю новую строку или ищу данные цвет фона исчезает, когда table.ajax.reload();
my ajax render script
"aoColumns": [
../
{ "mData": "expired",
"render": function ( data, type, row, meta ) {
var today = '<?php echo date("d/m/Y"); ?>';
if (data < today) {
$("td")
.filter(function() { return $.text([this]) == data; })
.parent()
.addClass("expired-date");
return '<td>'+data+'</td>';
}
else {
$("td")
.filter(function() { return $.text([this]) == data; })
.parent()
.removeClass("expired-date");
return '<td>'+data+'</td>';
}
}
},
как цвет фона не исчезает после table.ajax.reload();
?
1. цвет фона работает после обновления страницы 2. когда я вставляю новую строку или данные поиска, цвет фона исчезает после table.ajax.reload();
Я удаляю .filter()
и меняю $("td")
на $("td:contains('"+data+"')")
все равно исчезает
Вы пробовали мое решение? Он должен работать идеально.
Вы по-прежнему сравниваете строки даты, а не значения даты, что приведет к ошибкам, и вы повторно применяете класс к каждой строке N (номер строки) раз, вызывая непредсказуемый результат.
Кроме того, вам не нужно иметь две одинаковые строки return '<td>'+data+'</td>';
, вы можете просто поместить их за пределы if... else...
, если вам это вообще нужно.
Если вам нужно изменить стиль всей строки, назначив класс «expired-date» для устаревших записей, более логично использовать опцию createdRow
, например. так:
$('#yourTableId').DataTable({
...
createdRow: (tr, data) => new Date(data.expired.split('/').reverse().join('/')) < (new Date()).setHours(0,0,0,0) ? $(tr).addClass('expired-date') : true
});
Кроме того, вам не нужно вводить сегодня на стороне сервера, вы можете получить его на стороне пользователя, как я сделал выше, при условии, что вы получили свои даты в формате DD/MM/YYYY
, как это видно на скриншоте. В противном случае, если пользователь не обновлял всю страницу в течение нескольких дней, он может получить неожиданные результаты, поскольку некоторые записи не будут выделены.
Я меняю свой "render"
на createdRow, все работает, спасибо
Я в замешательстве. 1. Цвет фона исчезает при вызове table.ajax.reload(); 2. цвет фона не исчезает после table.ajax.reload();