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

使用createElement创建的元素调用insertAdjacentHTML不生效问题排查

问题根因

你遇到的问题和后续给table内容插入内容用insertAdjacentHTML无关,问题出在调用pageHeading.insertAdjacentHTML时的传参不符合方法要求:
insertAdjacentHTML的第二个参数必须是HTML格式的字符串,你传入的是createElement生成的DOM对象,JS会自动将DOM对象转为普通字符串,最终就渲染出了[object HTMLTableElement]。

另外你第二种尝试里写的tableHeading变量不存在,你实际定义的h1元素变量是pageHeading,就算要插入到h1内部也应该用pageHeading.appendChild(table)。

修复方案

推荐使用专门用来插入DOM元素的insertAdjacentElement方法,替换你原来的insertAdjacentHTML代码段即可,无需修改其他逻辑:

// 替换原来的pageHeading.insertAdjacentHTML代码
pageHeading.insertAdjacentElement("afterend", table)

完整可运行代码

<!DOCTYPE html>
<html>
<body>
<h1 id="pageHeading">Table</h1>
<h2>Test</h2>
<script>
const tableHeaders = [{
  titleOne: "Name",
  titleTwo: "Age",
  titleThree: "Nationality",
}]

const persons = [
  {
    name: "James",
    age: "23",
    nationality: "English",
  },
  {
    name: "Isabella",
    age: "21",
    nationality: "Italian",
  },
  {
    name: "Hank",
    age: "25",
    nationality: "American",
  },
  {
    name: "Manon",
    age: "27",
    nationality: "French",
  },
]
const pageHeading = document.querySelector("#pageHeading")

const table = document.createElement("table")
table.setAttribute("id", "table")
// 修复后的插入代码
pageHeading.insertAdjacentElement("afterend", table)

const headers = tableHeaders.map(header => {
  let ths = `<tr><th>${header.titleOne}</th><th>${header.titleTwo}</th><th>${header.titleThree}</th></tr>`
  table.insertAdjacentHTML("afterbegin", ths)
})

const personDetails = persons.map(person => {
  let tds = `<tr><td>${person.name}</td><td>${person.age}</td><td>${person.nationality}</td></tr>`
  table.insertAdjacentHTML("beforeEnd", tds)
})
</script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:54:01