
DataTables 默认会将单元格内容作为 HTML 渲染,导致 、& 等被解析。本文介绍使用 DataTable.render.text() 渲染器强制以纯文本方式显示原始字符串,确保 CSV 中的转义序列、标签符号等一字不差地呈现。
datatables 默认会将单元格内容作为 html 渲染,导致 ``、`&` 等被解析。本文介绍使用 `datatable.render.text()` 渲染器强制以纯文本方式显示原始字符串,确保 csv 中的转义序列、标签符号等一字不差地呈现。
在基于 Flask 的数据展示应用中,当用户上传含特殊字符(如 <i>I</i> & <b>B</b>)的 CSV 文件时,若直接将原始字符串传入 DataTables,它会自动执行 HTML 解析——即使你已用 String.raw 包裹或在服务端未做任何转义处理。这是因为 DataTables 的默认渲染行为等价于 .innerHTML = value,而非 .textContent = value。
✅ 正确解法是:在初始化 DataTable 时,为指定列显式声明 render: DataTable.render.text()。该内置渲染器会调用 document.createTextNode(value),确保所有字符(包括 , <code>&, \n, \t 等)均以字面量形式输出,完全绕过 HTML 解析引擎。
以下为可直接运行的完整示例(关键改动已加注释):
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://nightly.datatables.net/css/dataTables.dataTables.css" rel="stylesheet" />
<script src="https://nightly.datatables.net/js/dataTables.js"></script>
Test: <input id="i" type="text" oninput="redraw(value)" size="50">
<div class="container">
<table id="data-table" width="100%" border>
<thead>
<tr>
<th>默认渲染(HTML 解析)</th>
<th>text() 渲染(原样显示)</th> <!-- 新增一列用于对比 -->
</tr>
</thead>
</table>
</div>
<script>
const sample = '<i>I</i> & <b>B</b>';
// ✅ 关键:初始化时配置 columnDefs,对第1列(索引为1)启用 text 渲染器
const data_table = $("#data-table").DataTable({
columnDefs: [{
targets: [1], // 指定第二列(索引从0开始)
render: DataTable.render.text() // 强制纯文本渲染
}]
});
function redraw(value) {
data_table.clear();
// 同一数据传入两列:左列按默认方式(会解析),右列走 text() 渲染器(原样显示)
data_table.row.add([value, value]);
data_table.draw();
}
i.value = sample;
i.oninput(); // 触发首次渲染
</script>? 注意事项:
立即学习“前端免费学习笔记(深入)”;
-
DataTable.render.text()是 DataTables 官方提供的安全渲染器,无需额外依赖,兼容所有版本(≥1.10.0); -
targets支持数组、数字、类名(.my-column)或-1(最后一列)等多种定位方式; - 若需对多列统一处理,可传入
[0, 1, 2]或使用className配合targets: '.raw-text'; - 不要尝试在
row.add()中提前对字符串做escape()或正则替换——这违背了“零修改原始数据”的约束,且易引入编码错误; - 该方案不影响服务端逻辑:Flask 返回的 JSON/HTML 中仍保持原始字符串,前端仅控制显示层行为。
? 总结:DataTables 的渲染逻辑由 render 函数控制,默认为 HTML 模式;通过 DataTable.render.text() 显式切换为文本模式,是最简洁、可靠、符合语义的解决方案——既满足“逐字显示”需求,又无需篡改数据源,完美适配 CSV 原始内容直出场景。


















