Как создать логику разбивки на страницы в jQuery

Я пытаюсь создать "плагин" jQuery для разбивки на страницы записей в таблице. По мой собственный вопрос пробовал сделать вручную.

Кроме того, я пытаюсь понять, как отображать номера страниц в соответствии с buttonSize.

$(document).ready(function() {
  $('#tabla').pagination({
    pageSize: 1,
    buttonSize: 5,
    target: '#paginacion',
    template: `<nav class = "text-center" aria-label = "Page navigation">
  <ul class = "pagination" id = "paginacion">
  </ul>
</nav>`
  });  
});

$.fn.extend({
  pagination: function($options) {
    $el = this;
    buttons = $options.buttonSize || 5;
    htmlElement = $($options.template);
    target = $(htmlElement).find($options.target);
    rows = $($el).find('tbody tr');
    initialPage = 1;
    
    pagesAmount = Math.ceil(rows.length / $options.pageSize);
    pages = [];
    
    while(rows.length > 0) {
      let page = rows.splice(0, $options.pageSize);
      pages.push(page);
    }
    
    window.pages = pages;
    window.currentPage = initialPage;
    
    for(i=0; i<pagesAmount; i++) {
      paginationHTML = `<li><a data-page = "${i}" href = "#">${i+1}</a></li>`;
      target.append(paginationHTML);
    }
    $el.append(htmlElement);
    $el.find('tbody').html(pages[window.currentPage-1]);
    
    let scriptCode = `$('${$options.target} a').on('click', function() {` + "\n\t" +
                        `window.currentPage = $(this).attr('data-page'); ` + "\n\t" +
                        `$('#${$el.attr('id')} tbody').html(window.pages[window.currentPage]); ` + "\n" +
                        `$(this).parent().parent().find('li').each(function(item) { $(this).removeClass('active'); })` + "\n" +
                        `$(this).parent().addClass('active')` + "\n" +
                      `});` + "\n"
    $('body').append($('<script>').html(scriptCode));
  }
})
<link href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel = "stylesheet"/>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table id = "tabla" class = "table table-striped table-bordered">
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
      <th>Column 4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Column1: Row 1</td>
      <td>Column2: Row 1</td>
      <td>Column3: Row 1</td>
      <td>Column4: Row 1</td>
    </tr>
    <tr>
      <td>Column1: Row 2</td>
      <td>Column2: Row 2</td>
      <td>Column3: Row 2</td>
      <td>Column4: Row 2</td>
    </tr>
    <tr>
      <td>Column1: Row 3</td>
      <td>Column2: Row 3</td>
      <td>Column3: Row 3</td>
      <td>Column4: Row 3</td>
    </tr>
    <tr>
      <td>Column1: Row 4</td>
      <td>Column2: Row 4</td>
      <td>Column3: Row 4</td>
      <td>Column4: Row 4</td>
    </tr>
    <tr>
      <td>Column1: Row 5</td>
      <td>Column2: Row 5</td>
      <td>Column3: Row 5</td>
      <td>Column4: Row 5</td>
    </tr>
    <tr>
      <td>Column1: Row 6</td>
      <td>Column2: Row 6</td>
      <td>Column3: Row 6</td>
      <td>Column4: Row 6</td>
    </tr>
    <tr>
      <td>Column1: Row 7</td>
      <td>Column2: Row 7</td>
      <td>Column3: Row 7</td>
      <td>Column4: Row 7</td>
    </tr>
    <tr>
      <td>Column1: Row 8</td>
      <td>Column2: Row 8</td>
      <td>Column3: Row 8</td>
      <td>Column4: Row 8</td>
    </tr>
  </tbody>
</table>

Я не использовал функции ES6, так как наша система основана на Microsoft, и она не будет работать в IE.

Я не уверен, как настроить размер кнопки, поэтому, если у меня двести строк, двести страниц не будут отображаться.

Какие-либо предложения?

buttonSize - необходимое количество кнопок для отображения? Или реальный размер каждой кнопки?

showdev 03.10.2018 23:10

@showdev - желаемое количество кнопок для отображения. Если количество страниц побольше, думаю ..

Martin Fernandez 04.10.2018 14:02

Здесь вы можете найти полезные идеи алгоритмов: Умный алгоритм нумерации страниц.

showdev 04.10.2018 18:24

Я проверю эту ссылку. Спасибо.

Martin Fernandez 04.10.2018 21:27
Поведение ключевого слова "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
4
523
0

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