0

0

Layui表格done回调函数怎么修改DOM元素

畫卷琴夢

畫卷琴夢

发布时间:2026-03-17 16:37:33

|

171人浏览过

|

来源于php中文网

原创

done回调里直接操作DOM会失效,因Layui渲染后仍会执行scrollbar补丁注入和固定列计算,导致tbody被重排或替换;应使用templet列配置或setTimeout(0)延后操作。

done 回调里直接操作 DOM 会失效?

因为 done 是 layui 表格渲染完成后的回调,但此时表格主体(tbody)可能已被 laytable 内部用虚拟 dom 或重绘逻辑覆盖——你手动改的 dom 很可能在下一次排序、分页或搜索时被清掉。

常见错误现象:done 里用 document.querySelector 找到单元格并 innerHTML = 'xxx',页面一闪而过就恢复原样;或者点击分页后修改消失。

  • 必须等 Layui 完成最终渲染且不再干预 DOM 时再操作,推荐用 setTimeout(..., 0) 微任务延后
  • 优先用 templet 列配置做静态渲染,done 只处理动态/条件性 DOM(比如根据接口状态加 badge)
  • 避免直接改 trtdinnerHTML,改 innerText 或加 class 更安全

修改某列内容:用 templet 比 done 更稳

如果只是想把「状态码 1 → 显示“启用”,0 → “停用”」,别在 done 里遍历 DOM 改,Layui 原生支持模板列。

示例(JavaScript 初始化表格时):

cols: [[
  {field: 'status', title: '状态', templet: function(d) {
    return d.status === 1 
      ? '<span class="layui-badge layui-bg-green">启用</span>' 
      : '<span class="layui-badge layui-bg-gray">停用</span>';
  }}
]]
  • templet 在每次重绘(包括排序、搜索、分页)都会重新执行,天然同步
  • 不用管 done,也不用监听事件,代码更少、不易出错
  • 若需异步数据(比如根据 d.id 请求用户角色),templet 不适用,才退回到 done + setTimeout

done 中修改 DOM 的正确姿势

真要动态加按钮、绑定 click、插入远程加载的内容,得确保操作发生在 Layui 渲染闭环之后。

Word-As-Image for Semantic Typography
Word-As-Image for Semantic Typography

文字变形艺术字、文字变形象形字

下载

示例(给每行加一个「编辑」按钮,并绑定事件):

done: function(res, curr, count) {
  // 等 layTable 完全释放 DOM 控制权
  setTimeout(() => {
    const trs = document.querySelectorAll('.layui-table-body tbody tr');
    trs.forEach((tr, i) => {
      const data = res.data[i]; // 注意:res.data 是当前页数据
      const btn = tr.querySelector('.edit-btn');
      if (btn && data) {
        btn.onclick = () => editUser(data.id);
      }
    });
  }, 0);
}
  • 必须用 res.data[i] 对应当前页第 i 行数据,不能依赖 tr.dataset.index(Layui 不写这个)
  • 不要用 $(...).on('click', ...),Layui 未引入 jQuery 时会报错;纯 JS 绑定更可靠
  • 如果表格启用了 skin: 'line'size: 'sm',DOM 结构不变,不影响选择器

为什么不能在 render 完立刻改?

Layui 表格的 done 触发时机是「数据已载入、DOM 已生成」,但内部还有两步没完:scrollbar 补丁注入固定列位置计算。这两步会触发 tbody 重排或替换,你提前改的 DOM 就丢了。

  • Chrome DevTools 里打断点看 done 执行时,tbodychildElementCount 可能还是 0,稍后才填入 tr
  • setTimeout(..., 0) 不是“随便加”,而是让 JS 引擎把控制权交还给浏览器,等它完成样式计算和布局后再执行
  • 若涉及大量 DOM 操作(如每行加 3 个按钮),建议用 DocumentFragment 批量插入,避免重排抖动

最麻烦的其实是分页切换时的 DOM 复用——Layui 会复用 tr 元素并只更新 innerText,所以直接改 innerHTML 后,复用时旧结构还在,新数据没刷进去。这事容易被忽略,直到用户狂点下一页才暴露。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

407

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

516

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

129

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

4

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号