Angular-Datatable:如何清理 table 单元格中的数据

Angular-Datatable: How to unsanitize data in table cell

我正在使用 Angular Datatables 来显示记录。但似乎这个 table 插件会自动清理单元格中的值。

例如,如果我的数据是 "Test Record &GT",它将显示 "Test Record >",但我的要求是显示 "Test Record &GT"。到目前为止,我已经探索了 "createdCell" 函数并创建了过滤器和指令来修复此问题,但无济于事。

这是我使用"createdCell"

时的代码
.withOption('createdCell', function (cell, cellData, rowData, row, col) { 
                    $(cell).html(cellData); 
                })

但它仍然是 returns 经过清理的数据。请帮忙。谢谢:)

Sanitize 适用于 HTML,不适用于 .text()

但是,如果您执行 $(cell).text(cellData) 而不是 $(cell).html(cellData),它将不会进行清理,因此您的代码将不会呈现为 html,而是以文本形式呈现。

这里有一个fiddle来表示.html().text()的区别 http://jsfiddle.net/hossain/sUTVg/

我同意 Tirthraj Barot 的回答,因为它会阻止 HTML 编码,但整个设置确实没有多大意义:然后 createdCell() 被调用 cellData 已经填充到 <td>。所以基本上你只需再次插入 cellData ,就像文本一样。

更好的方法是使用 renderWidth() 中的“& 技巧”。只需将任何 & 替换为 &amp; - 这样就不会将 HTML 实体编码到它们的特殊字符中,因为它们被混淆了:

.renderWith(function(data, type, full) {
  return data.replace('&', '&amp;') //use /g if you have multiple &'s
})

这也确保您可以使用指令,就像在您的 中一样:

.renderWith(function(data, type, full) {
  return "<my-directive>"+data.replace('&', '&amp;')+"</my-directive>";
})  

如果要再次填充 cellData,则需要再次 $compile 或将 $compile 包装成 $timeout。通过替换 &,您不需要它。

查看演示 -> http://plnkr.co/edit/gmVAm7qvG9lXVsOgWg8K?p=preview