附加字符串时将其解释为HTML标记

时间:2013-07-03 17:56:55

标签: javascript html

我正在解析JSON对象并将数据显示到表中。 但是,这些数据中的一些具有这样的括号< ,> ,> =,< =后跟字母或数字。 在这种情况下,来自JSOn的数据如下所示:

    (rRandomString<iamNotaTAG)

并在附加后生成的html为:

    (rRandomString
    <iamNotaTAG) td="" <=""></<iamNotaTAG)>

更新1:我用来解析JSON的代码就是这个

    var json = $.parseJSON(data);
    for (var i = 0, maxlength = json.length; i < maxlength; i += 1 ) {
       my_string = json[i][1];
       result += "<tr class='my_result'>"
              + "<td>"+my_string+"</td></tr>"
    }
    $('#my_table tbody').html(result);

2 个答案:

答案 0 :(得分:3)

您应该做的是将内容添加为文本而不是HTML。这对你来说有点棘手,因为你要附加一个HTML结构。所以需要重新思考一下:

var result = $([]); // empty object

var json = $.parseJSON(data);
for (var i = 0, maxlength = json.length; i < maxlength; i += 1 ) {
   var my_string = json[i][1]; // this should really be locally defined, I think

   var newcontent = $('<td>')      // create a td element
       .text(my_string)            // add the content as text
       .wrap('<tr>')               // wrap the td in a new tr
       .parent()                   // go up to the tr
           .addClass('my_result'); // add the class to the tr

   result.add(newcontent);         // add the tr to the set of trs
}
$('#my_table tbody').html(result); // add all the trs to the tbody

答案 1 :(得分:2)

在将字符串添加到生成的html(http://jsfiddle.net/cvAuB/

之前,只需转义字符串
var json = [[0, "some str"], [1, "some <str>"], [0, "some str &&& <a>not a link</a>"]], },           result = "", current;


var tagsToReplace = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;'
}

function replaceTag(tag) {
    return tagsToReplace[tag] || tag;
}

function textify(str) {
    return str.replace(/[&<>]/g, replaceTag);
};
for (var i = 0, maxlength = json.length; i < maxlength; i++ ) {
   current = textify(json[i][1]);
   result += "<tr class='my_result'>"
          + "<td>"+current+"</td></tr>"
}

$('#my_table tbody').html(result);