2011-10-12 32 views
8

我正在使用jquery datatable,它使用sAjaxSource属性动态加载一些JSON。一切都很好,除了加载的内容被视为潜在的标记,所以事情变得奇怪,如果单元格中的文本包含<或某些。在JSON驱动的jQuery数据表中转义标记?

如何在将数据加载到表中之前获取数据表来转义我的数据?我不想做它的服务器端,因为服务器不应该关心客户端将如何处理数据。

+0

试试这种方法: http://stackoverflow.com/questions/24816/escaping-html-strings-with-jquery – rcravens

回答

3

[注:下面这个答案是数据表和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,你也需要处理它。

2

这里有几个简单的位:

function htmlEncode(value) { 
    return $('<div/>').text(value).html(); 
} 

function htmlDecode(value) { 
    return $('<div/>').html(value).text(); 
} 
+2

对不起,我的问题不是超清晰,我已经改写了一点。问题不在于“如何在JavaScript中转义字符串”,它是“如何获取数据表来转义字符串,因为它从ajax源加载它们” – kdt