不使用.html

时间:2019-05-24 23:44:44

标签: javascript jquery

我想在每次向服务器发送消息时插入聊天消息。每条聊天消息都包含一个用户名,一个头像和一条消息。如何使用jQuery附加多个HTML元素?使用此代码,它可以工作,但是我担心使用.html,因为现在用户可以发送"<i>Italic</i>"之类的消息,其他用户也可以将其显示为HTML。我只使用了一个.text元素来解决此安全问题,但是我只能包含一个非常简单的结构,而无需使用头像或任何样式

$("#submit").click(function() {
    var username = '<%= user.name %>'; // Username is stored in Session, using EJS to set this
    var avatar = '<%= user.avatar_small %>'; // Avatar is stored in Session, using EJS to set this
    var message = $("#message").val(); // getting message from input field

    $("#chatList").append(
    $("<li class='list-group-item list-group-item-dark'></li>").html("<img src='"+avatar+"' alt='Avatar' /><label>"+username+":</label> "+message));

    // Socket.io used here to send information to the server
    socket.emit("message", {
        username: username
        message: message,
        avatar: avatar
    });
});

1 个答案:

答案 0 :(得分:0)

您必须对要设置其文本的元素的文本每个进行转义:

const $li = $("<li class='list-group-item list-group-item-dark'><img alt='Avatar'><label></label></li>")
$li.find('img').prop('src', avatar);
$li.find('label').text(username + ':')
$li.append(document.createTextNode(message));
$("#chatList").append($li);