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

JavaScript调用appendChild时报参数非Node类型TypeError错误

报错根因

appendChild 是DOM节点专属的插入方法,要求传入的参数必须是Node类型的真实DOM对象,原代码中li是拼接得到的HTML格式字符串,不属于DOM节点,因此触发类型错误。

修复代码

写法1(推荐,无XSS风险)

通过createElement创建真实li节点,设置文本后插入:

document.getElementById('myButton').onclick = function () {
  const inputVal = document.getElementById('toDo').value.trim();
  // 拦截空输入,避免生成空列表项
  if (!inputVal) return;
  // 创建真实li DOM节点
  const li = document.createElement('li');
  // 用textContent赋值,自动转义特殊字符,避免XSS风险
  li.textContent = inputVal;
  document.getElementById('list').appendChild(li);
  // 清空输入框
  document.getElementById('toDo').value = '';
}

写法2(直接插入HTML字符串)

如果习惯写HTML字符串,替换appendChild为支持字符串插入的insertAdjacentHTML方法即可:

document.getElementById('myButton').onclick = function () {
  const inputVal = document.getElementById('toDo').value.trim();
  if (!inputVal) return;
  const liStr = `<li>${inputVal}</li>`;
  // beforeend表示在ul元素内部的末尾位置插入内容
  document.getElementById('list').insertAdjacentHTML('beforeend', liStr);
  document.getElementById('toDo').value = '';
}

注意:第二种写法直接拼接用户输入插入HTML存在XSS安全隐患,如果是面向公网的正式项目优先选择第一种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:39:20