我正在使用jquery datatable,它使用sAjaxSource
属性动态加载一些JSON。一切都很好,除了加载的内容被视为潜在的标记,所以事情变得奇怪,如果单元格中的文本包含<
或某些。在JSON驱动的jQuery数据表中转义标记?
如何在将数据加载到表中之前获取数据表来转义我的数据?我不想做它的服务器端,因为服务器不应该关心客户端将如何处理数据。
我正在使用jquery datatable,它使用sAjaxSource
属性动态加载一些JSON。一切都很好,除了加载的内容被视为潜在的标记,所以事情变得奇怪,如果单元格中的文本包含<
或某些。在JSON驱动的jQuery数据表中转义标记?
如何在将数据加载到表中之前获取数据表来转义我的数据?我不想做它的服务器端,因为服务器不应该关心客户端将如何处理数据。
[注:下面这个答案是数据表和1.9倍以下。 1.10改变了方法命名约定和其他一些事情。 1.9x方法是可用的,但不推荐使用,将不可避免地被完全剥离。]
如果可以安全地剥离它们“批发”(即如果您设计的转义字符串函数不影响JSON的有效性)
"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;
}
可以通过使用fnServerData功能做
在这个示例中,我只修改第一个单元格。如果它适用于所有单元格,则可能需要编写一个遍历整行以进行转换的迭代器。如果它只适用于某些单元格,则可以一次处理它们一个。
请注意,aData [0]和td:eq(0)只能巧合地具有相同的索引(0)。如果您有任何隐藏的列,则不一定会匹配。另外,如果你使用mDataProp,你也需要处理它。
这里有几个简单的位:
function htmlEncode(value) {
return $('<div/>').text(value).html();
}
function htmlDecode(value) {
return $('<div/>').html(value).text();
}
对不起,我的问题不是超清晰,我已经改写了一点。问题不在于“如何在JavaScript中转义字符串”,它是“如何获取数据表来转义字符串,因为它从ajax源加载它们” – kdt
试试这种方法: http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery – rcravens