Таблицы данных рендеринга не работают после ajax.reload

У меня есть код для проверки даты истечения срока действия, когда строка с истекшим сроком действия меняет цвет фона, например успех, если срок действия истек но когда я вставляю новую строку или ищу данные цвет фона исчезает, когда 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. Цвет фона исчезает при вызове table.ajax.reload(); 2. цвет фона не исчезает после table.ajax.reload();

MyTwoCents 28.05.2019 18:10

1. цвет фона работает после обновления страницы 2. когда я вставляю новую строку или данные поиска, цвет фона исчезает после table.ajax.reload();

limey in 29.05.2019 04:52

Я удаляю .filter() и меняю $("td") на $("td:contains('"+data+"')") все равно исчезает

limey in 29.05.2019 09:59

Вы пробовали мое решение? Он должен работать идеально.

Yevgen Gorbunkov 29.05.2019 11:25

Вы по-прежнему сравниваете строки даты, а не значения даты, что приведет к ошибкам, и вы повторно применяете класс к каждой строке N (номер строки) раз, вызывая непредсказуемый результат.

Yevgen Gorbunkov 29.05.2019 11:28

Кроме того, вам не нужно иметь две одинаковые строки return '<td>'+data+'</td>';, вы можете просто поместить их за пределы if... else..., если вам это вообще нужно.

Yevgen Gorbunkov 29.05.2019 11:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
261
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вам нужно изменить стиль всей строки, назначив класс «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, все работает, спасибо

limey in 29.05.2019 16:55

Другие вопросы по теме