javascript - 在 JSON 驱动的 jQuery 数据表中转义标记?

标签 javascript jquery datatables

我正在使用 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/

相关文章:

javascript - "fadeTo"函数忽略时间

java - 如何从 JSP 刷新/访问模型

javascript - javascript 的 QuerySelector VS Jquery 的 Find()

javascript - 如何在单个页面上显示多个 "Swiper"幻灯片

javascript - fancybox 中的同位素过滤存在问题

javascript - 如何将.csv 中的数据加载到数据表中?

datatables - 是否可以过滤 multi_select 上的空白字段?

javascript - jQuery 从选定行中选择所有数据

jquery - 如何使用 JQuery DataTables 根据每个单元格中值的子字符串对列进行排序

JavaScript 没有打印我的 HTML