1

我喜欢使用 JavaScript DOM 操作动态创建 HTML 模板元素。像这样的东西:

const template = document.createElement("template")

const div = document.createElement("div")

template.append(div)

但是,当使用div 容器时,模板属性append中将不可用。content相反,您必须innerHTML像这样使用:

const template = document.createElement("template")

template.innerHTML = "<div></div>"

这确实有效,因为innerHTML为模板标签实现了特殊行为(请参阅https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Operational_details)。

但是,innerHTML它也有一些缺点,所以问题是:如何将模板标签与使用创建的内容一起使用document.createElement

这里的一个方面是一些 JavaScript 框架(即 Angular 和 React)确实在document.createElement内部使用来创建 DOM 树。这使得几乎不可能在这些框架中使用模板标签。

作为使用模板标签的 Web 组件的作者,我想支持框架用户,但目前我没有看到任何这样做的方法,我开始考虑完全删除模板标签。另一方面,我无法想象 usinginnerHTML是这里唯一的方法,而且 Web 组件标准的作者没有考虑到这一点,所以我在这里肯定有一些东西被忽略了。

4

1 回答 1

3

你正在做:

  const template = document.createElement("template");
  const div = document.createElement("div");
  template.appendChild(div);

你应该做:

  const template = document.createElement("template");
  const div = document.createElement("div");
  template.content.appendChild(div);

注意你也可以在这里追加,你没有使用返回值。
并且 append 可以接受 TextNodes 和多个参数:

https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/append

于 2020-09-30T07:36:31.387 回答