let table = new Tabulator("#table", { rowFormatter: function(row) { // 获取当前行的所有单元格 const cells = row.getCells(); // 假设第一列(索引 0)包含待处理的超链接 const linkCell = cells[0]; const cellEl = linkCell.getElement(); const rawValue = linkCell.getValue(); // 返回原始 innerHTML 字符串 // 安全地解析并还原为可渲染的 DOM 超链接 // 注意:确保 rawValue 是可信 HTML cellEl.innerHTML = rawValue; }});
重要安全提示:cellEl.innerHTML = rawValue 会直接执行 HTML 解析。仅当 td 中的 a 标签来自可信源(例如静态页面或已经严格校验的后台数据)时才能这样使用。如果内容可能包含用户输入,建议先用 DOMPurify 等库净化 HTML,或者改用 cellEl.textContent = linkText 配合手动构造 a 元素的方式。
进阶优化:按列名/字段名精准定位(推荐)
如果列顺序可能变动,建议结合 getColumn 或列定义中的 field 属性进行匹配:
rowFormatter: function(row) { const linkCell = row.getCell("column1"); // 假设对应列 field 为 "column1" if (linkCell) { const el = linkCell.getElement(); el.innerHTML = linkCell.getValue(); }}
同时,确保原始 th 的 data-field 属性与 JS 中的引用一致(Tabulator 会自动映射):
| column 1 |
最终效果
经过上述配置后,原本显示为纯文本的 a 标签内容,将被正确渲染为可点击、带下划线、遵循浏览器默认样式的超链接,并且保留原有的 href 行为。
总结
- 不要依赖 Tabulator 自动解析嵌套的
a 标签; - 使用
rowFormatter + getCell() + getElement().innerHTML 主动重写; - 始终评估 HTML 内容来源的安全性;
- 对于多列都包含链接的场景,可以循环
row.getCells() 并按条件筛选处理。
这个方案兼容 Tabulator 5.x 及以上版本,无需额外插件,是把传统 HTML 表格迁移到 Tabulator 时处理富文本单元格的标准实践。