使用Vanilla JavaScript分页

时间:2018-09-19 21:31:39

标签: javascript

我对JavaScript还是很陌生,所以很抱歉,如果这很明显或者问题不清楚。

我有一个分页作业,我必须使用一个函数将学生列表限制为每页10个。我允许使用一些jQuery,但绝对没有插件。

目前,我有:

const numberOfStudents = $('.page .student-item').length;
const limitPerPage = 10;
var totalPages = Math.ceil(numberOfStudents / limitPerPage);

如何使用此功能创建函数?限制学生。我当时在考虑使用循环,但我不知道从哪里开始。

谢谢!

3 个答案:

答案 0 :(得分:1)

一段时间以前,我写了这个小函数来为我处理分页数组。您不应该在非常大的阵列上使用它,但是它可以在相对较小的阵列上使用。它的用法应该很不言自明:

function paginateArray(ary, perPage=10, pageNumber=1) {
  const start = perPage * (pageNumber - 1)

  const size = ary.length
  return {
    data: ary.slice(start, start + perPage),
    numberOfPages: Math.ceil(size / perPage),
    currentPage: pageNumber,
    dataLength: size
  }
}

paginateArray([1,2,3,4,5], 2, 1]
// {data: [1, 2], numberOfPages: 3, currentPage: 1, dataLength: 5}

答案 1 :(得分:0)

是否将分页.student-item的DOM元素已加载到页面上的分配?这不是标准的,但是如果这是分配的任务,那么我建议您隐藏不在“当前页面”上的.student-item

// All this code should run after the .student-item's are loaded.
// If this makes for an ugly flash of .student-item's that should not
// be shown, then you can hide the .student-item's by default in css,
// and let jquery force the .student-item to be shown.

function displayPage(pageNum) { // pageNum must be between 0 and totalPages-1
    $('.page .student-item').each(function(idx, studentEle) {
        if (idx >= (limitPerPage * pageNum) && idx < (limitPerPage * (pageNum+1))) {
            studentEle.show(); // student is on this page
        } else {
            studentEle.hide(); // student is NOT on this page
        }
    });
}

$('.page-select').on('change', function () {
    // example <select> element for the page.
    // Most likely you would want some links or buttons, not a <select> element, but this is just an example
    var selectedPage = $('.page-select option:selected').first().val();
    displayPage(selectedPage - 1);
});

displayPage(0);

答案 2 :(得分:0)

似乎您正在使用jQuery操作DOM,并且实际上可能没有直接供您使用的数据。从专业的角度来看,此代码不是最佳的解决方案,但我认为适合您的教育情况。

var currentPage = 1;

// Hide every student beyond the first page
$('.student-item').each(function(i, student) {
  if (i >= limitPerPage * currentPage) {
    $(student).hide()
  }
});

// Manipulate the DOM to show the students on the new 'page'
function displayNewPage() {
  $('.student-item').each(function(i, student) {
    if (i >= limitPerPage * currentPage || i < limitPerPage * (currentPage - 1)) {
      $(student).hide();
    } else {
      $(student).show();
    }
  });
};

// Create a button with id 'page-left' for this work
$('#page-left').on('click', function() {
  if (currentPage > 1) {
    currentPage--;
    displayNewPage();
  }
  if (currentPage === 1) {
    $('#page-left').prop('disabled', true);
  }
  $('#page-right').prop('disabled', false);
});

// Create a button with id 'page-right' for this work
$('#page-right').on('click', function() {
  if (currentPage < totalPages) {
    currentPage++;
    displayNewPage();
  }
  if (currentPage === totalPages) {
    $(event.target).prop('disabled', true);
  }

  // Allow 
  $('#page-left').prop('disabled', false);
});