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

两段相似的JS添加列表元素代码为何输出结果不一致?

两段代码输出差异的核心原因

差异本质是Node.appendChild()方法的返回值规则导致的,具体拆解如下:

第一段代码执行逻辑错误点

第一段代码的链式调用写法没有正确拿到需要插入的<li>元素:

var AddText = document.createElement('li').appendChild(document.createTextNode("hello"));

appendChild()方法执行完成后,返回值是被插入的子节点,而非调用该方法的父节点,所以上面这行代码里AddText变量存的是你创建的hello文本节点,不是之前新建的<li>元素。后续调用ListParent.appendChild(AddText)时,是直接把文本节点插入到了<ul>标签下,没有<li>包裹。
每次点击都会新生成一个文本节点插入到ul中,文本会直接拼接在一起,所以第二次点击就会显示hellohello。

第二段代码执行逻辑正确点

第二段代码拆分了创建节点和插入子节点的步骤:

// 先把新建的li元素存到变量中
var AddText = document.createElement('li');
// 给li插入文本节点
AddText.appendChild(document.createTextNode('hello'));
// 把整个li元素插入到ul下
ListParent.appendChild(AddText);

每次点击都会新增一个完整的<li>hello</li>元素插入到ul中,所以DOM结构和显示效果都符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:06:04