如何为markdown表格添加自定义交互

前言

目前各家公司的大模型应用如火如荼,除了大模型算法应答能力外,在前端交互上也有差异化展示。 期望在模型输出markdown文本的表格时,能展示如下的表格样式与交互:

表格样式可以通过css处理,但是表头上面的标题+按钮需要新增dom元素和js操作。

通常情况下,会想到在渲染表格后通过dom接口添加新的dom元素满足交互,稍显复杂,也不利于代码维护。而且模型输出,同一个页面上也可以存在多个表格,如果能抽离成组件使用,每个表格各自维护状态,互不影较好。

提到组件编写,可以采用笔者使用webcomponent编写的自定义表格组件👉my-tableWeb Component用得少?在大模型中寻找使用场景,里面包含了表格样式、交互、以及状态维护。

my-table组件编写完成且已完成注册,接下来就考虑如何与模型输出的markdown表格渲染关联使用。

markdown解析器

采用marked.js解析器:marked.js.org

按照文档将引入项目内,由于我们需要对表格进行扩展,因此是针对表格渲染时处理,return返回的就是对应的表格html。

js 复制代码
marked.use({
    renderer: {
        table(token){
            return '<table>xxx</table>'
        }
    }
})

拓展表格交互

按照my-table表格组件的入参,将marked.js解析生成的表格html放在my-table标签包裹即可。

由于renderer函数是重写的,因此原有生成table的富文本也需要重写,当然不是让人从无到有地重写,这一点可以查阅marked.js源码,复制原有的table renderer富文本格式,再使用my-table标签包裹,一并return返回。

这是marked.js中table renderer的源码(查阅GitHub:marked.js):

把table render的代码复制一份再稍微调整一下语言,最终return时使用自定义组件my-table:

js 复制代码
marked.use({
    renderer: {
        table(token){
            let header = '';

            // header
            let cell = '';
            for (let j = 0; j < token.header.length; j++) {
              cell += this.tablecell(token.header[j]);
            }
            header += this.tablerow({ text: cell });

            let body = '';
            for (let j = 0; j < token.rows.length; j++) {
              const row = token.rows[j];

              cell = '';
              for (let k = 0; k < row.length; k++) {
                cell += this.tablecell(row[k]);
              }

              body += this.tablerow({ text: cell });
            }
            if (body) body = `<tbody>${body}</tbody>`;
            // 这里使用自定义组件my-tabel包裹原来的table文本
            return `
                <my-table>
                    <table>
                        <thead>${header}</thead>
                        ${body}
                    </table>
                </my-table>
            `;
        }
    }
})

经过重写table renderer的处理,解析输出的表格富文本自带了my-table标签,在页面渲染时能直接渲染出对应的样式与交互。

通过webcomponent编写的表格浏览器原生支持,不用考虑前端技术栈。

最后

markdown文本输出的富文本添加自定义的样式与交互是很常见的操作,每个平台的主题风格、产品要求不尽相同。

文中提到的表格交互是比较复杂一点的,抽离成组件维护。一般场景没有这么复杂,没必要抽离组件,就在renderer函数对应标签重新输出,或者为markdown渲染的html提供css文件即可。

相关推荐
β添砖java17 分钟前
深度学习31注意力机制、注意力分数、使用注意力机制的seq2seq、自注意力
人工智能·深度学习
ZGIAI23 分钟前
销售团队最缺的不是另一个 AI,而是有人把跟进这件事一直做下去
人工智能·架构
隔窗听雨眠38 分钟前
MCP会成为Agentic AI的标准吗?技术演进、生态博弈与标准之路的深度分析
人工智能
2601_9676598840 分钟前
2026年多个网页快速提取重点、自动汇总、对比并整理成表格的AI工具清单
人工智能
IT古董44 分钟前
AI资讯日报|2026年9月5日:GPT-6 Astra全量推送却遭“翻车“,奥特曼紧急致歉一天12条大新闻:OpenAI翻车、英伟达收购、最狠AI法案出台
人工智能
chen_zn951 小时前
《WAM 系列》Zero-WAM | 人类视频上下文学习 | 未来片段预测 | 零样本跨任务泛化
人工智能·具身智能·vla
airank1 小时前
2026年GEO服务商选型指南:系统梳理服务商分类框架、主流服务商能力横评、企业级选型六大维度及避坑要点,帮助企业在AI搜索时代做出科学决策。
大数据·人工智能·数据分析·aigc
Delite8021 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
Jialu.1 小时前
模型压缩实战:BERT 量化从 390MB 到 146MB 的实践
人工智能·深度学习·bert
袋鼠云数栈1 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理