You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用.append($(message_element))仅输出[object Object]?

问题原因及解决办法

核心问题1:模板字符串的HTML被转义,样式无法生效

你在模板字符串里写了<、"这类HTML实体,浏览器会把它们当作普通文本解析,不会生成真正的DOM元素,自然样式也无法应用。

核心问题2:原生DOM节点调用append时传入jQuery对象,导致显示[object Object]

message_body是通过原生JS的document.querySelector获取的DOM节点,它的append方法只接受DOM元素、文本节点或者字符串。你传入的$(message_element)是一个jQuery对象,原生append会把这个对象直接转为字符串,也就是[object Object]。


修改后的代码示例

方案一:用原生JS的insertAdjacentHTML(推荐,无需依赖jQuery操作DOM)

let input_message = document.querySelector('#input-message')
let message_body = document.querySelector('.msg_card_body')
let send_message_form = document.getElementById('send-message-form')
let loc = window.location
let wsStart = 'ws://'

if (loc.protocol === 'https') {
  wsStart = 'wss://'
}

let endpoint = wsStart + loc.host + loc.pathname
var socket = new WebSocket(endpoint)

socket.onopen = function(event) {
  console.log('open', event)
  send_message_form.addEventListener('submit', function(event) {
    event.preventDefault()
    
    let message = input_message.value
    let data = {
      'message': message,
    }
    
    data = JSON.stringify(data)
    socket.send(data)
  })
}
socket.onmessage = function(event) {
  console.log('message', event)
  
  let data = JSON.parse(event.data)
  let message = data['message']
  newMessage(message)
}
socket.onerror = function(event) {
  console.log('error', event)
}
socket.onclose = function(event) {
  console.log('closed', event)
}

function newMessage(message) {
  if ($.trim(message) === '') {
    return false;
  }

  // 修复:直接写正常的HTML标签,不用转义
  let message_element = `
    <div class="d-flex mb-4 replied">
      <div class="msg_cotainer_send">
        ${message}
        <span class="msg_time_send">8:55 AM, Today</span>
      </div>
      <div class="img_cont_msg">
        <img src="data:image/jpeg;">
      </div>
    </div>
  `

  // 修复:用原生insertAdjacentHTML插入HTML字符串
  message_body.insertAdjacentHTML('beforeend', message_element)
  
  // 优化滚动:精准滚动到消息容器底部
  $(message_body).animate({
    scrollTop: message_body.scrollHeight
  }, 100);
  input_message.value = '';
}

方案二:将message_body转为jQuery对象,用jQuery的append方法

// 把message_body的获取改成jQuery方式
let message_body = $('.msg_card_body')
let input_message = $('#input-message')
let send_message_form = $('#send-message-form')

let loc = window.location
let wsStart = 'ws://'

if (loc.protocol === 'https') {
  wsStart = 'wss://'
}

let endpoint = wsStart + loc.host + loc.pathname
var socket = new WebSocket(endpoint)

socket.onopen = function(event) {
  console.log('open', event)
  send_message_form.on('submit', function(event) {
    event.preventDefault()
    
    let message = input_message.val()
    let data = {
      'message': message,
    }
    
    data = JSON.stringify(data)
    socket.send(data)
  })
}
socket.onmessage = function(event) {
  console.log('message', event)
  
  let data = JSON.parse(event.data)
  let message = data['message']
  newMessage(message)
}
socket.onerror = function(event) {
  console.log('error', event)
}
socket.onclose = function(event) {
  console.log('closed', event)
}

function newMessage(message) {
  if ($.trim(message) === '') {
    return false;
  }

  // 修复HTML转义问题
  let message_element = `
    <div class="d-flex mb-4 replied">
      <div class="msg_cotainer_send">
        ${message}
        <span class="msg_time_send">8:55 AM, Today</span>
      </div>
      <div class="img_cont_msg">
        <img src="data:image/jpeg;">
      </div>
    </div>
  `

  // 用jQuery的append方法直接插入字符串
  message_body.append(message_element)
  
  // 优化滚动:精准滚动到消息容器底部
  message_body.animate({
    scrollTop: message_body[0].scrollHeight
  }, 100);
  input_message.val('');
}

内容的提问来源于stack exchange,提问作者neeuts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:01:11