You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止jQuery DataTable分页或排序时重置自定义样式?

解决DataTables分页/排序后自定义样式消失的问题

我懂你的痛点——DataTables在分页、排序或者搜索后会重新渲染分页控件,你一开始初始化时给分页按钮加的label-page类和自定义ID都会被冲掉,所以样式就没了。下面给你两种靠谱的解决办法:

方法1:利用DataTables的draw.dt事件重新绑定样式

DataTables每次重绘表格(包括分页、排序、搜索操作)都会触发draw.dt事件,我们可以把设置样式的逻辑封装成函数,在初始化后和每次重绘时都执行:

$(document).ready(function () {
  $.fn.DataTable.ext.pager.numbers_length = 5;
  
  // 封装设置分页样式的函数
  function setPaginationStyles() {
    let paginationElements = document.querySelectorAll("#news_paginate > span .paginate_button");
    paginationElements.forEach(function (value, key, nodeList) {
      value.setAttribute("class", "label-page");
      value.setAttribute("id","toggle-" + key);
    });
  }

  $('#news').DataTable({
    rowReorder: true,
    dom: '<"filter-controls-wrapper"f><"table-box" t><"pagination-wrapper"p>'
  });

  // 初始化后先执行一次
  setPaginationStyles();
  // 每次表格重绘时重新执行
  $('#news').on('draw.dt', setPaginationStyles);
});

这样不管表格怎么刷新,分页按钮的样式都会被重新加上,就不会消失了。

方法2:直接用CSS优先级覆盖(更推荐)

其实你完全不用修改DOM元素的类,直接针对DataTables默认生成的分页按钮类写样式,通过CSS选择器优先级来覆盖默认样式,这样连JS都不用额外写:

/* 直接针对DataTables默认的分页按钮类写样式 */
.dataTables_paginate .paginate_button {
  width: 80px ;
  height: 25px ;
  margin: 0 10px ;
  border-radius: 999px ;
  background: crimson ;
  cursor: pointer;
  box-shadow: 0 5px 5px -5px rgba(220, 20, 60, 0.15), 0 10px 10px -5px rgba(220, 20, 60, 0.15), 0 15px 15px -5px rgba(220, 20, 60, 0.15), 0 20px 20px -5px rgba(220, 20, 60, 0.15) ;
  transition: 0.25s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  padding: 10px;
  border: none; /* 去掉DataTables默认的边框 */
}

.dataTables_paginate .paginate_button:hover {
  width: 120px;
  background: crimson; /* 覆盖默认hover背景色 */
}

/* 选中当前页的样式也可以一起自定义 */
.dataTables_paginate .paginate_button.current {
  background: darkred;
}

这种方法更简洁,因为DataTables不会移除默认的.paginate_button类,所以你的样式会一直生效,不需要依赖JS事件。注意把之前的label-page相关样式替换成上面的代码,同时记得覆盖默认的hover和当前页样式,避免冲突。

为什么!important没用?

因为DataTables在重绘时会给分页按钮重新添加内联样式或者更高优先级的类,!important有时候也顶不住,而且用!important不是最佳实践,上面两种方法都比它靠谱。

内容的提问来源于stack exchange,提问作者Something in common

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:37:30