appendChild无法向body插入元素,报TypeError错误求原因
问题原因分析
你代码里的核心问题出在这一行:
let elm = document.createElement("p").innerHTML = txt;
这是连续赋值操作,JavaScript会从右往左执行:
- 先执行
document.createElement("p").innerHTML = txt,这个操作的返回值是被赋值的txt(也就是字符串Hello Stack Overflow!) - 接着把这个字符串赋值给
elm,所以elm本质是个字符串,并非你创建的<p>DOM元素对象。
而appendChild()方法要求传入的必须是DOM节点对象,你传入字符串自然会抛出TypeError。
至于append()方法能正常运行,是因为它的参数支持DOM节点、字符串等多种类型,传字符串也能直接插入页面。
修正后的代码
如果要保留appendChild(),需要先创建元素并保存引用,再设置innerHTML:
(async () => { let resp = await fetch("/shaders", { method: "GET" }); let txt = await resp.text(); // 先创建元素并保存引用 let elm = document.createElement("p"); // 再设置innerHTML elm.innerHTML = txt; console.log(txt) // Hello Stack Overflow! document.body.appendChild(elm) })()
内容的提问来源于stack exchange,提问作者anathrax
相关产品推荐
相关产品推荐

