Почему в моем коде разбивки на страницы JavaScript отображается количество записей, предшествующих записям на текущей странице?

Я использовал Stack Overflow и другие ресурсы для компиляции ванильного разбиения на страницы JavaScript для создаваемого мной плагина. Пагинация предназначена для элементов DOM, которые динамически создаются через внешний API, а затем печатаются на сайте с помощью PHP в теге «передачи».

Пагинация работает нормально (я использовал функцию array.from для создания массива всех элементов, созданных с помощью упомянутого выше тега), однако есть один небольшой нюанс, который действительно ошеломляет меня: код, кажется, отображает количество записей которые существуют до тех, что находятся на текущей странице.

Например, если я нахожусь на первой странице, отображается «0» (нет записей до страницы 1), если я нахожусь на второй странице, отображается «5» (у меня он настроен на отображение 5 записей на странице), третья страница "10" и так далее.

Я уверен, что это связано с этим JavaScript, поскольку, когда я удаляю его вызов, номер исчезает.

Вот мой код:

var $table = document.getElementById("recents"),
$n = 5,
$rows = Array.from(document.getElementsByTagName("transfer")),
$rowCount = $rows.length,
$tr = [],
$i,$ii,$j = 0;
var $pageCount = Math.ceil($rowCount / $n);
if ($pageCount > 1) {
    for ($i = $j,$ii = 0; $i < $rowCount; $i++, $ii++)
       $tr[$ii] = $rows[$i].outerHTML;
    $table.insertAdjacentHTML("afterend","<div id='buttons'></div");
    sort(1);
}
function sort($p) {
    var $rows = $s = (($n * $p)-$n);
    for ($i = $s; $i < ($s+$n) && $i < $tr.length; $i++)
        $rows += $tr[$i];
    $table.innerHTML = $rows;
    document.getElementById("buttons").innerHTML = pageButtons($pageCount,$p);
    document.getElementById("id"+$p).setAttribute("class","active btn btn-secondary");
}
function pageButtons($pCount,$cur) {
    var $prevDis = ($cur == 1)?"disabled":"",
        $nextDis = ($cur == $pCount)?"disabled":"",
        $buttons ='<div class = "row w-100 mx-auto my-4">';
        $buttons += '<div class = "btn-group mx-auto" role = "group">';
        $buttons += "<button type='button' value='&lt;&lt; Prev' class='btn btn-secondary'  onclick='sort("+($cur - 1)+")' "+$prevDis+">&lt;&lt; Prev</button>";
    for ($i=1; $i<=$pCount;$i++)
        $buttons += "<button type='button' id='id"+$i+"'value='"+$i+"' class='btn btn-secondary'  onclick='sort("+$i+")'>"+$i+"</button>";;
        $buttons += "<button type='button' value='Next &gt;&gt;' class='btn btn-secondary' onclick='sort("+($cur + 1)+")' "+$nextDis+">Next &gt;&gt;</button>";
        $buttons += '</div>';
        $buttons += '</div>';
    return $buttons;
}

Ожидаемые результаты - это разбитый на страницы список переводов, напечатанных в элементе с идентификатором «недавние», и список интерактивных кнопок для следующих страниц, но я также получаю количество записей, предшествующих записям на текущей странице.

Похоже, у вас проблемы с элементом, который отображает информацию о текущей странице (например, «в настоящее время просматриваются элементы 11-15»), но я вижу только код для кнопок разбивки на страницы. Можете ли вы объяснить, что вы в настоящее время получаете (скажите что-то вроде «кнопка разбивки на страницы с номером 0 на ней» вместо «она отображает 0», потому что я не понимаю, о чем вы говорите).

James 04.01.2019 17:22

Спасибо за ваш вклад. Я включил JS только для разбивки на страницы, поскольку я определил, что именно этот блок кода является проблемой, в порядке исключения. Еще раз спасибо за помощь, это действительно ценится.

MakingStuffs 04.01.2019 17:33
Поведение ключевого слова "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) для оценки ваших знаний,...
4
2
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы усложняете ситуацию, используя:

var $rows = $s = (($n * $p)-$n);

Это устанавливает $rows равным тому, что для $s установлено (например, 0, 5, 10 и т. д.), Поэтому, когда вы находитесь на странице 3, $rows инициализируется значением 10, а после добавления HTML у вас будет "10<row><row><row><row><row>", что приведет к появлению 10 перед все строки.

Выполняйте инициализацию в одной строке каждый, чтобы было более ясно, что вы собираетесь делать (и чтобы было легче заметить подобные ошибки):

var $rows = "";
var $s = (($n * $p)-$n);

Это оно! Большое вам спасибо, я знал, что сделал бы что-то простое и глупое. Буквально изменил эту строку на: var $ rows = ''; var $ s = (($ n * $ p) - $ n); И он теперь не отображает номер. Спасибо!

MakingStuffs 04.01.2019 17:32

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