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

如何使用JavaScript创建多层Div并插入聊天消息变量值

错误原因说明

  • 核心报错原因:你代码里的document.getElementsByClassName("newNode")逻辑完全错误。newNode是你已经声明好的DOM节点变量,不需要通过类名查询DOM获取,直接调用变量本身的方法即可。且getElementsByClassName返回的是类数组的HTMLCollection集合,本身没有appendChild方法,调用自然抛出异常。
  • 结构不匹配:你缺少了预期结构中media-body内部的空div层,也没有创建class="chat-cont"的p标签承载消息,直接给media-body设置innerHTML不符合要求。
  • 换行符处理问题:HTML不会识别\n为换行,如果你的消息需要按换行拆分多个p标签,需要单独处理。

正确实现代码

const data = JSON.parse(e.data);
// 1. 创建最外层的media chat-messages层
const newNode = document.createElement('div');
newNode.className = 'media chat-messages';

// 2. 创建media-body层
const newNode2 = document.createElement('div');
newNode2.className = 'media-body chat-menu-content';

// 3. 创建内部的空div层
const innerDiv = document.createElement('div');

// 4. 处理消息,按换行拆分生成多个p.chat-cont标签
const msgLines = data.message.split('\n');
msgLines.forEach(line => {
  const p = document.createElement('p');
  p.className = 'chat-cont';
  p.textContent = line; // 用textContent避免XSS风险,不要用innerHTML
  innerDiv.appendChild(p);
});

// 5. 按层级拼接节点
newNode2.appendChild(innerDiv);
newNode.appendChild(newNode2);
document.getElementById('chat-log').appendChild(newNode);

注意事项

如果消息内容是用户输入的,用textContent代替innerHTML可以避免XSS注入风险,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:06