Angular-Datatable:如何清理 table 单元格中的数据
Angular-Datatable: How to unsanitize data in table cell
我正在使用 Angular Datatables 来显示记录。但似乎这个 table 插件会自动清理单元格中的值。
例如,如果我的数据是 "Test Record >",它将显示 "Test Record >",但我的要求是显示 "Test Record >"。到目前为止,我已经探索了 "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()
中的“& 技巧”。只需将任何 &
替换为 &
- 这样就不会将 HTML 实体编码到它们的特殊字符中,因为它们被混淆了:
.renderWith(function(data, type, full) {
return data.replace('&', '&') //use /g if you have multiple &'s
})
这也确保您可以使用指令,就像在您的 中一样:
.renderWith(function(data, type, full) {
return "<my-directive>"+data.replace('&', '&')+"</my-directive>";
})
如果要再次填充 cellData
,则需要再次 $compile
或将 $compile
包装成 $timeout
。通过替换 &
,您不需要它。
我正在使用 Angular Datatables 来显示记录。但似乎这个 table 插件会自动清理单元格中的值。
例如,如果我的数据是 "Test Record >",它将显示 "Test Record >",但我的要求是显示 "Test Record >"。到目前为止,我已经探索了 "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()
中的“& 技巧”。只需将任何 &
替换为 &
- 这样就不会将 HTML 实体编码到它们的特殊字符中,因为它们被混淆了:
.renderWith(function(data, type, full) {
return data.replace('&', '&') //use /g if you have multiple &'s
})
这也确保您可以使用指令,就像在您的
.renderWith(function(data, type, full) {
return "<my-directive>"+data.replace('&', '&')+"</my-directive>";
})
如果要再次填充 cellData
,则需要再次 $compile
或将 $compile
包装成 $timeout
。通过替换 &
,您不需要它。