我有一个textarea。在其点击事件。我将它插入数据库,然后将其显示为元素列表中的第一个元素。问题是。如果我在textarea中输入"<afasd>"
,则jquery无法正确显示它。它显示为空。
守则
var note = $.trim( $('#rep_notes_add_notes').val());
if(note == "")
return false;
$.ajax({
url: 'include/tre.ajax.php',
type: 'POST',
data: {
action: 'insert',
note: note
},
dataType: 'json',
success: function(data) {
jQuery("#rep_notes_add_notes").val('');
jQuery(".no_notes").remove();
*$(".notes:eq(0)").before('<div class="notes">'+note+'<div class="note-added"> Added by '+user +'<span> on </span>'+data.update_time+'</div></div>');*
}
});
标记为*的行找到notes div,然后在其前插入一个元素以显示新输入的文本。
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
它不会显示它,因为它认为<afasd>
是标记,而不是文本。您需要将<
更改为<
才能显示。
var str = "<afasd>";
var escaped = str.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
答案 1 :(得分:3)
不要将任意数据连接成HTML。您正在打开自己的注射问题,以及您看到的无效HTML问题。这一行:
$(".notes:eq(0)").before('<div class="notes">'+note+'<div class="note-added"> Added by '+user +'<span> on </span>'+data.update_time+'</div></div>');
应该成为这样的事情(未经测试,未完成,但你明白了):
$('.notes:eq(0)').before(
$('<div>').addClass('notes').text('Added by ' + user)
);
关键是,如果要设置文本而不是HTML,请使用.text()
。