使用数据表格进行分页

使用数据表格进行分页的完整攻略如下:

步骤一:准备数据

首先需要从数据库中查询出数据,可以使用如下的 SQL 语句来查询某张表中的所有数据:

SELECT * FROM table_name;

然后将查询结果保存到一个数组或列表中。

步骤二:渲染表格

使用 html 和 css 创建一个表格,每行显示一条数据。当数据过多时,可以使用滚动条进行浏览。一个示例的 HTML 代码如下:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>John</td>
      <td>25</td>
      <td>john@example.com</td>
    </tr>
    <!-- more rows... -->
  </tbody>
</table>

步骤三:添加分页功能

在表格下方添加一个分页器,用于显示当前页码和总页数,并提供翻页的功能。一个示例的 HTML 代码如下:

<div class="pagination">
  <a href="?page=1">&laquo; First</a>
  <a href="?page=2">2</a>
  <a class="active" href="?page=3">3</a>
  <a href="?page=4">4</a>
  <a href="?page=5">5</a>
  <a href="?page=6">&hellip;</a>
  <a href="?page=10">10</a>
  <a href="?page=4">&raquo; Last</a>
</div>

其中,每个 <a> 标签链接了不同的页码。在当前页码下,添加了一个 .active 类。

在后端程序中,需要通过查询字符串获取当前页码,然后根据每一页需要显示多少条数据,从数组或列表中过滤出当前页需要显示的数据,然后重新渲染表格和分页器即可。

示例一:PHP + MySQL

以下是一个使用 PHP 和 MySQL 实现分页的示例。假设数据表名为 users,字段名为 idnameageemail

// 获取当前页码,如果未设置则默认为第一页
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// 每页显示多少条数据
$limit = 10;

// 数据库连接信息
$host = "localhost";
$user = "username";
$password = "password";
$dbname = "database_name";

// 连接数据库
$conn = mysqli_connect($host, $user, $password, $dbname);

// 查询数据总数
$sql = "SELECT count(*) as total FROM users";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$total = $row['total'];

// 计算总页数
$num_pages = ceil($total / $limit);

// 当前页码超出范围时,自动调整到最后一页
if ($page > $num_pages) {
  $page = $num_pages;
}

// 计算当前页要显示的数据的起始位置
$start = ($page - 1) * $limit;

// 查询当前页的数据
$sql = "SELECT * FROM users LIMIT $start, $limit";
$result = mysqli_query($conn, $sql);
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);

// 关闭数据库连接
mysqli_close($conn);

以上代码通过 mysqli 扩展库连接 MySQL 数据库,并查询出所有数据的总数以及当前页需要显示的数据。然后计算出总页数,并根据当前页码计算出起始位置,查询出当前页需要显示的数据。最后关闭数据库连接。

接下来,将查询结果用于渲染表格和分页器。以下是示例 HTML 代码:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($rows as $row) : ?>
      <tr>
        <td><?= $row['id'] ?></td>
        <td><?= htmlspecialchars($row['name']) ?></td>
        <td><?= $row['age'] ?></td>
        <td><?= htmlspecialchars($row['email']) ?></td>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>

<div class="pagination">
  <?php if ($page > 1) : ?>
    <a href="?page=1">&laquo; First</a>
    <a href="?page=<?= $page - 1 ?>">&lsaquo; Previous</a>
  <?php endif; ?>

  <?php for ($i = 1; $i <= $num_pages; $i++) : ?>
    <a href="?page=<?= $i ?>" <?= $i === $page ? 'class="active"' : '' ?>><?= $i ?></a>
  <?php endfor; ?>

  <?php if ($page < $num_pages) : ?>
    <a href="?page=<?= $page + 1 ?>">Next &rsaquo;</a>
    <a href="?page=<?= $num_pages ?>">&raquo; Last</a>
  <?php endif; ?>
</div>

以上代码首先使用 PHP 的 foreach 循环渲染出数据表格,其中通过 htmlspecialchars 函数对每个单元格的内容进行了转义,以避免 XSS 攻击。然后根据总页数和当前页码,使用 for 循环渲染出分页器。如果当前处于第一页或最后一页,将不会渲染「First」或「Last」链接。

示例二:Vue.js

以下是一个使用 Vue.js 实现分页的示例。

假设数据保存在一个名为 data 的数组中,每个元素包含 idnameageemail 四个属性。

<div id="app">
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Age</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="item in pagedData" :key="item.id">
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.age }}</td>
        <td>{{ item.email }}</td>
      </tr>
    </tbody>
  </table>

  <div class="pagination">
    <a href="#"
      @click.prevent="setCurrentPage(1)"
      :disabled="currentPage === 1">&laquo; First</a>

    <a href="#"
      @click.prevent="setCurrentPage(currentPage - 1)"
      :disabled="currentPage === 1">&lsaquo; Previous</a>

    <a href="#"
      v-for="page in numPages"
      :key="page"
      @click.prevent="setCurrentPage(page)"
      :class="{ active: currentPage === page }">{{ page }}</a>

    <a href="#"
      @click.prevent="setCurrentPage(currentPage + 1)"
      :disabled="currentPage >= numPages">&rsaquo; Next</a>

    <a href="#"
      @click.prevent="setCurrentPage(numPages)"
      :disabled="currentPage >= numPages">&raquo; Last</a>
  </div>
</div>

以上代码使用 Vue.js 的 v-for 指令渲染出数据表格,使用 v-bind 指令绑定「First」和「Previous」链接的 disabled 属性以控制它们的可用性。分页器部分使用 v-for 渲染出每个页面,使用 v-bind 绑定当前页码和页面的 active 类。

new Vue({
  el: "#app",
  data: {
    data: [], // 总的数据
    itemsPerPage: 10, // 每页显示多少条数据
    currentPage: 1 // 当前页码
  },
  computed: {
    numPages() {
      return Math.ceil(this.data.length / this.itemsPerPage);
    },
    pagedData() {
      const startIndex = (this.currentPage - 1) * this.itemsPerPage;
      const endIndex = startIndex + this.itemsPerPage;
      return this.data.slice(startIndex, endIndex);
    }
  },
  methods: {
    setCurrentPage(page) {
      this.currentPage = page;
    }
  }
});

以上代码创建了一个 Vue.js 实例,并使用 computed 属性计算出总页数和当前页要显示的数据,使用 methods 属性添加了一个方法 setCurrentPage 用于设置当前页码。在 HTML 代码中通过 v-bind 绑定了相应的数据和事件。

在实际应用中,需要将数据保存在一个服务器端,并通过 AJAX 等技术从客户端请求数据。以上示例的代码只是在本地直接使用数组来演示分页的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用数据表格进行分页 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • jQWidgets jqxPanel主题属性

    以下是关于 jQWidgets jqxPanel 组件中主题属性的详细攻略。 jQWidgets jqxPanel 主题属性 jQWidgets jqxPanel 组件的主题属性用于设置面板的主题。 语法 $(‘#panel’).jqxPanel({ theme: ‘classic’ }); 示例 以下两个示例演示如何使用主题属性。 示例 1 // 设置面板…

    jquery 2023年5月12日
    00
  • jQuery通过Ajax向PHP服务端发送请求并返回JSON数据

    下面是详细的攻略: 前置条件 在进行本教程之前,请确保你已经掌握了以下知识: HTML 基础语法和标记 CSS 简单样式编写 JavaScript 基础语法和DOM操作 PHP 基础语法和服务端开发 jQuery 基础语法和Ajax操作 准备工作 在开始我们的教程之前,先创建一个 PHP 文件 getData.php,该文件用于模拟请求服务端并返回 JSON…

    jquery 2023年5月28日
    00
  • jquery获得当前html页面源码的方法

    使用jQuery获取当前html页面源码的方法有多种。下面将介绍其中两种比较常用的方法。 方法1:使用 .html() 方法获取当前页面的整个html源码 $(document).ready(function(){ var htmlCode = $(‘html’).html(); console.log(htmlCode); }); 解析:首先等待页面加载完…

    jquery 2023年5月27日
    00
  • jQuery中mouseover事件用法实例

    下面是针对“jQuery中mouseover事件用法实例”的详细攻略: 1. 什么是mouseover事件 mouseover事件是JavaScript中常用的事件之一,当鼠标光标进入一个页面元素(如div、a、img等)时会触发该事件。在jQuery中,该事件可以通过.mouseover()方法绑定到页面元素上。当鼠标光标进入该元素时,bound func…

    jquery 2023年5月28日
    00
  • jquery默认校验规则整理

    jQuery默认校验规则整理 简介 在jQuery中,提供了一些默认的校验规则可以方便地应用到表单验证中。这些校验规则可以减少开发者的工作量,同时提高了表单输入数据的准确性。本文将介绍jQuery的默认校验规则及其应用方法。 准备工作 在使用jQuery的校验规则之前,需要引入jQuery库及其插件库jquery.form.js和jquery.validat…

    jquery 2023年5月28日
    00
  • JQuery 的跨域方法推荐_可跨任何网站

    JQuery 提供了多种跨域请求方法,其中最常用的是 JSONP 和 CORS 。下面分别介绍这两种方法的使用。 JSONP 跨域请求 什么是 JSONP JSONP (JSON with padding)是一种简单的跨域请求解决方案。它的原理是通过在页面中插入一个 script 标签,将数据封装在一个函数调用中返回,并由浏览器自动调用该函数。 JSONP …

    jquery 2023年5月27日
    00
  • JQuery扩展插件Validate 3通过参数设置错误信息

    JQuery扩展插件Validate 3是一款非常流行的前端表单校验插件,它可以通过一些参数设置自定义的错误提示信息。在本文中,我将为大家详细讲解这个过程。 1. 设置错误提示信息 JQuery扩展插件Validate 3默认的错误提示信息可能并不太适合我们的实际需求,所以我们需要通过一些设置来自定义错误提示信息。其中,errorClass和errorPla…

    jquery 2023年5月28日
    00
  • jQWidgets jqxDropDownList disableItem()方法

    jQWidgets jqxDropDownList disableItem()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件的组件。本文将详细介绍jqxDrop的disableItem()方法,包括用法、语法和示例。 disableItem()方法的基本语法 di…

    jquery 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部