使用JavaScript实现表格数据的分页显示

分页显示是Web应用开发中常用的一种技术,通过将数据划分为多个页面进行显示,可以提高页面加载速度和用户的交互体验。在实际开发过程中,我们通常使用JavaScript实现表格数据的分页显示。本文将介绍如何使用JavaScript实现表格数据的分页显示,包括如何获取数据、如何分页、如何显示分页数据等内容。

1. 获取数据

在实现分页显示之前,首先需要获取需要显示的数据。我们可以使用Ajax技术获取后台数据,也可以将数据直接嵌入到页面中。以嵌入数据为例,以下是一个包含数据的表格:

<table id="table">

<thead>

<tr>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

</tr>

</thead>

<tbody>

<tr>

<td>张三</td>

<td>20</td>

<td>男</td>

</tr>

<tr>

<td>李四</td>

<td>22</td>

<td>女</td>

</tr>

<tr>

<td>王五</td>

<td>25</td>

<td>男</td>

</tr>

<tr>

<td>赵六</td>

<td>19</td>

<td>女</td>

</tr>

<tr>

<td>钱七</td>

<td>21</td>

<td>男</td>

</tr>

<tr>

<td>孙八</td>

<td>23</td>

<td>女</td>

</tr>

</tbody>

</table>

2. 分页

在获取到需要显示的数据后,我们需要将数据进行分页处理。在此,我们将数据分为每页3条记录,以下是一个简单的分页函数:

function paginate(items, page, per_page) {

var offset = (page - 1) * per_page,

paginatedItems = items.slice(offset).slice(0, per_page),

total_pages = Math.ceil(items.length / per_page);

return {

page: page,

per_page: per_page,

pre_page: page - 1 ? page - 1 : null,

next_page: (total_pages > page) ? page + 1 : null,

total: items.length,

total_pages: total_pages,

data: paginatedItems

};

}

该函数接受三个参数:items表示需要进行分页的数据,page表示当前页数,per_page表示每页显示的条数。函数返回一个对象,其中包含了分页后的数据和相关信息。具体来说,该函数将数据根据page和per_page进行切割,然后计算出总页数(total_pages),当前页数(page)、本次分页数据条数(per_page)、上一页(page - 1)和下一页(page + 1)等信息。使用该函数可以轻松实现数据分页,下面是一个例子:

var items = [

{ name: '张三', age: 20, gender: '男' },

{ name: '李四', age: 22, gender: '女' },

{ name: '王五', age: 25, gender: '男' },

{ name: '赵六', age: 19, gender: '女' },

{ name: '钱七', age: 21, gender: '男' },

{ name: '孙八', age: 23, gender: '女' }

];

var per_page = 3;

var page = 1;

var paginatedItems = paginate(items, page, per_page);

console.log(paginatedItems); // { page: 1, per_page: 3, pre_page: null, next_page: 2, total: 6, total_pages: 2, data: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 22, gender: '女' }, { name: '王五', age: 25, gender: '男' } ] }

3. 显示分页数据

在实现了数据分页后,我们需要将分页后的数据进行显示。具体来说,我们需要根据分页信息生成页码列表,并将数据显示在页面上。以下是一个简单的显示函数:

function showTable(paginatedItems) {

var table = document.getElementById('table');

var tbody = table.getElementsByTagName('tbody')[0];

tbody.innerHTML = '';

for (var i = 0; i < paginatedItems.data.length; i++) {

var row = tbody.insertRow(i);

var data = paginatedItems.data[i];

for (var j in data) {

var cell = row.insertCell(j);

cell.innerHTML = data[j];

}

}

}

function showPagination(paginatedItems) {

var pagination = document.getElementById('pagination');

pagination.innerHTML = '';

var page = paginatedItems.page,

total_pages = paginatedItems.total_pages;

var pageStart = page - 2 > 0 ? page - 2 : 1,

pageEnd = page + 2 < total_pages ? page + 2 : total_pages;

var ul = document.createElement('ul');

var li = document.createElement('li');

li.innerHTML = '<a href="#">?</a>';

if (paginatedItems.pre_page) {

li.querySelector('a').addEventListener('click', function () {

showPage(paginatedItems.pre_page);

});

} else {

li.className = 'disabled';

}

ul.appendChild(li);

for (var i = pageStart; i <= pageEnd; i++) {

var li = document.createElement('li');

li.innerHTML = '<a href="#">' + i + '</a>';

if (i == page) {

li.className = 'active';

} else {

li.querySelector('a').addEventListener('click', function () {

var page = parseInt(this.innerHTML);

showPage(page);

});

}

ul.appendChild(li);

}

var li = document.createElement('li');

li.innerHTML = '<a href="#">?</a>';

if (paginatedItems.next_page) {

li.querySelector('a').addEventListener('click', function () {

showPage(paginatedItems.next_page);

});

} else {

li.className = 'disabled';

}

ul.appendChild(li);

pagination.appendChild(ul);

}

function showPage(page) {

var paginatedItems = paginate(items, page, per_page);

showTable(paginatedItems);

showPagination(paginatedItems);

}

var items = [

{ name: '张三', age: 20, gender: '男' },

{ name: '李四', age: 22, gender: '女' },

{ name: '王五', age: 25, gender: '男' },

{ name: '赵六', age: 19, gender: '女' },

{ name: '钱七', age: 21, gender: '男' },

{ name: '孙八', age: 23, gender: '女' }

];

var per_page = 3;

showPage(1);

该函数接受分页信息作为参数,然后生成页码列表并将数据显示到页面上。具体来说,该函数使用document.createElement和document.createTextNode方法创建节点,然后使用appendChild将节点添加到页面上。在生成页码列表时,该函数使用了一些CSS样式,以美化样式。

总结

本文介绍了如何使用JavaScript实现表格数据的分页显示,包括如何获取数据、如何分页、如何显示分页数据等内容。在实际开发中,我们可以根据实际需求对代码进行修改和扩展,以满足不同的需求。