我正在使用 jquery datatable它正在使用 sAjaxSource
动态加载一些 JSON属性(property)。一切都很好,除了加载的内容被视为潜在标记,所以如果单元格中的文本包含 <
,事情就会变得很奇怪。或类似的东西。
在将数据加载到表中之前,如何让数据表转义我的数据?我不想在服务器端执行此操作,因为服务器不应该关心客户端将如何处理数据。
最佳答案
[注意:以下答案适用于 DataTables 1.9x 及以下版本。 1.10 改变了方法命名约定和其他一些东西。 1.9x 方法可用但已弃用,并且不可避免地会被完全删除。]
如果“批发”剥离它们是安全的(即,如果您设计了一个不影响 JSON 有效性的转义字符串函数),您可以使用 fnServerData 函数来实现:
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.ajax( {
"dataType": 'json',
"type": "GET",
"url": sSource,
"data": aoData,
"success": function (data) {
// run your escape string function to modify 'data'
fnCallback(data); // or fnCallback(newData) if you used new variable
}
});
}
如果您不确定批量修改它的安全性,您可以使用 fnRowCallback 逐行进行:
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
var cellData = myEscaper(aData[0]); // where myEscaper() is your own custom function
$('td:eq(0)').text(cellData);
return nRow;
}
在此示例中,我只修改了第一个单元格。如果它适用于所有单元格,您可能需要编写一个遍历整行以进行转换的迭代器。如果它只适用于某些细胞,你可以一次处理它们。
请注意,aData[0] 和 td:eq(0) 只是巧合地具有相同的索引 (0)。如果您有任何隐藏列,则不一定会匹配。此外,如果您使用 mDataProp,您也需要处理它。
关于javascript - 在 JSON 驱动的 jQuery 数据表中转义标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740567/