如何让JavaScript DataTables显示原始字符串而非解析转义字符?
如何在DataTables中完全展示原始文本(含转义字符/代码标签)
问题核心:要让DataTables原样显示CSV里的所有内容,包括转义字符、HTML标签/代码,且不能修改原始文本本身。之前用String.raw无效,因为DataTables会自动解析HTML内容。
解决方案:强制DataTables以纯文本渲染单元格
DataTables默认会把单元格内容当作HTML渲染,所以要通过配置或手动转义,让它把所有内容当作纯文本输出。有两种可靠方法:
方法1:初始化时配置列的render函数
在DataTables初始化时,给目标列指定render函数,用jQuery的text()方法自动转义所有特殊字符:
var sample = '<i>I</i> &amp; <b>B</b>'; // 初始化DataTables时配置列的渲染规则 var data_table = $("#data-table").DataTable({ columns: [ { data: 0, render: function(data) { // 用text()方法转义所有HTML特殊字符,再转成HTML字符串返回 return $('<div>').text(data).html(); } } ] }); function redraw(sample) { data_table.clear(); data_table.row.add([sample]); data_table.draw(); } i.value = sample; i.oninput();
方法2:添加行时插入文本节点
直接创建纯文本节点插入单元格,避免DataTables解析HTML:
var sample = '<i>I</i> &amp; <b>B</b>'; var data_table = $("#data-table").DataTable(); function redraw(sample) { data_table.clear(); // 创建纯文本节点,确保内容不被解析为HTML var textNode = document.createTextNode(sample); // 把文本节点放到td元素里 var tdElement = $('<td>').append(textNode); // 将td的HTML内容加入DataTables data_table.row.add([tdElement[0].outerHTML]); data_table.draw(); } i.value = sample; i.oninput();
为什么之前的String.raw没用?
String.raw只是处理JavaScript模板字符串的转义逻辑,比如避免把\n解析成换行,但它管不了DataTables的渲染规则——DataTables拿到字符串后,默认会把它当作HTML解析,所以哪怕你传的是<b>,它也会自动转换成<b>标签并渲染成加粗效果。而上面的两种方法,都是通过转义特殊字符,让浏览器把所有内容当作纯文本显示,完全保留原始内容的格式。
对应的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" type="text/css" /> <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 border id="data-table" width="100%"> <thead> <tr> <th>default</th> </tr> </thead> </table> </div>
内容的提问来源于stack exchange,提问作者magnawhale
相关产品推荐
相关产品推荐

