“共 xx 条”必须通过 layout 数组显式声明位置,因其为无 class/id 的 textnode,css 无法选中;需配 response.countname 或 parsedata 提取真实总数,精细插入需 done 回调手动操作 dom。
“共 xx 条”不能靠 css 移动,必须用 layout 显式声明位置,否则它会死死卡在 prev 和 next 按钮中间,且没有 class、id 可选。
为什么直接写 CSS 无效
因为“共 XX 条”不是独立 DOM 元素,而是 document.createTextNode 动态插入的纯文本节点,夹在 .layui-laypage-prev 和 .layui-laypage-next 之间。它没 class、没 id、不走模板,CSS 选择器根本抓不到——你写的 .layui-laypage-count 在旧版 Layui 里并不存在,新版也不保证稳定。
- 试图用
display: flex; justify-content: space-between强行撑开?没用,父容器不是 flex,文本节点也没 wrapper - 用
:nth-child()或span:nth-of-type()定位?DOM 结构随时可能被 Layui 内部重绘打乱 - 想给它加 class 或 style?得 patch 源码或等渲染完手动包裹,升级后极易失效
正确做法:用 layout 数组重排整个分页栏
layout 是唯一可控入口,它决定每个区块的渲染顺序。把 'count' 放到你想让它出现的位置,比如最左、最右、甚至插在页码中间(需配合其他项)。
-
layout: ['count', 'prev', 'page', 'next']→ “共 XX 条”出现在最左边 -
layout: ['prev', 'page', 'next', 'count']→ 出现在最右边 -
layout: ['prev', 'page', 'count', 'next']→ 插在页码和“下一页”之间(注意:此时'count'必须存在,否则不显示) - 漏掉
'count',整段文字就彻底消失;拼错成'counts'或'total',也会回退默认位置
后端字段名不叫 count 怎么办
如果接口返回的是 { total: 123, data: [...] },光改 layout 不行,count 字段还是拿不到真实值,显示会是 “共 0 条” 或空白。
- 必须配
response: { countName: 'total' },让 Layui 知道去哪取总数 - 或者更稳妥地,在
parseData里手动提取:parseData: res => ({ count: res.total, data: res.data }) - 别在
page: { count: 123 }里硬编码数字——它只在前端分页时生效,一连后端就失效 -
parseData必须 return 对象,且 key 名必须是count和data,大小写、拼写错一个都不认
想塞进两个页码按钮之间?只能等渲染完再操作 DOM
Layui 不提供“在第 3 个页码后插入 count”的钩子。如果你真需要这种精细控制(比如设计稿强制要求),只能在 done 回调里手动插入:
done: function(res, curr, count) {
const pageWrap = document.querySelector('.layui-laypage');
const pageNums = pageWrap.querySelectorAll('.layui-laypage-curr');
if (pageNums.length >= 3) {
const target = pageNums[2]; // 第 3 个页码元素
const countEl = document.createElement('span');
countEl.className = 'layui-laypage-count-custom';
countEl.innerHTML = `共 ${res.count || count} 条`;
target.parentNode.insertBefore(countEl, target.nextSibling);
}
}
注意:这属于兜底方案,每次翻页都要执行,且依赖 Layui 当前 DOM 结构——v2.9 若调整页码渲染逻辑,这段代码就得重写。











