问题标签 [documentfragment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 追加后如何删除文档片段中的元素
我正在开发一个 javascript 项目,在该项目中我使用文档片段一次附加多个 span 元素。然后他们用css动画。
我试图弄清楚动画完成后如何删除跨度。我用过
当它只适用于一个元素时它工作正常,但我需要删除片段中的所有元素。
我感谢你的帮助。
javascript - appendChild() 从导入的模板中去除内容
<template>
我使用函数获得了 HTML5 的活动副本importNode()
:
在此之后,我填充动态数据,
最后,我将节点附加到目标容器中:
我的问题:result
节点的所有内容都被剥离了:我无法在结果节点中访问模板的组件元素。实际上,一旦执行了操作,该result
节点就根本不包含子节点。appendChild
我希望 的返回值appendChild
应该指向已插入容器中并且现在是活动文档的一部分的节点。任何解释为什么不是这种情况?
这是 jsfiddle(在 Chrome 53 中测试):
javascript - JavaScript:将节点复制到 DocumentFragment
我认为 DocumentFragment 的全部意义在于能够在不接触 DOM 的情况下构造内容,直到它准备就绪。
鉴于 DocumentFragment 不支持innerHTML
,它可能有点乏味。另一方面,一旦构建完成,通过片段本身很容易将内容添加到现有的 DOM 节点。
如果我创建一个div
而不将它添加到 DOM,我可以按照我喜欢的方式填充它,包括innerHTML
. 据我所知,它应该不会对性能产生额外的影响。
是否有一种简单的方法(即一行左右)将现有 DOM 节点的内容复制到 DocumentFragment?该过程如下所示:
这样我就可以两全其美了。
回答
下面是@KevBot 的答案,并入示例中:
javascript - 检查浏览器是否支持 DocumentFragment
我正在使用 DocumentFragment 将一些子节点附加到列表中,但是在某些浏览器中我遇到了不支持的问题。所以我想知道除了检查浏览器是否在支持的浏览器列表中(或者至少是为我完成这项工作的方法)之外,还有另一种检查方法吗?
对不起!!!这是我正在使用的代码
容器是 Jquery 对象($('#listF'))
已解决:我的错误,我使用的 append() 似乎适用于 chrome,但不适用于其他浏览器。在 documentFragment 上追加元素的正确方法是 appendChild()。
工作代码:
javascript - 我可以使用 JavaScript 将 HTML 注释转换为实际的 HTML 吗?
如果我将注释节点插入到文档片段中,我可以稍后将其转换为 HTML 吗?例子:
这在片段内部会是什么样子:
以及完成后应该如何(实际 DOM):
背景:
将 HTML 插入片段有很多限制。片段不支持innerHTML
等insertAdjacentHTML
。还有其他方法可以将 HTML 放入片段中,但它们会删除某些元素并只留下内部文本。例如,使用createRange
API 创建片段会删除这些类型的节点,我将留下一个只有文本节点“数据”的片段
希望如果我可以将评论转换为实际的 DOM,它将按预期工作。
javascript - 在 DocumentFragment 中:无法在 'Element' 上执行 'insertAdjacentHTML':该元素没有父级
我在 DocumentFragment 内部工作,并试图将 HTML 插入其中。我们知道 DocumentFragment 没有 innerHTML 设置器,所以我尝试在 DocumentFragment 中插入一个临时节点,并在它之后使用insertAdjacentHTML
. 然后我会删除临时元素,并留下一个带有我想要的 DOM 的片段。
示例:(错误是故意的)
我可以清楚地看到临时元素有一个 parentNode,那么为什么会出现此错误?
javascript - 无法创建存储 td、tr 或 th 的 DocumentFragment?
是否可以让 DocumentFragments 包含 tr、th 或 td 标签?
如果我这样做:
我得到[table]
.
如果我这样做:
我得到了[]
!!!?!?的输出
如果我这样做:
我得到[p]
了??!?!?!??!?!??!
最后,如果我这样做:
我明白[span]
了 - td 去哪儿了??!
我不明白这里的不一致。文档片段是否可能只包含某些元素?我想做的是做类似于上面第二个的事情,然后使用querySelector
.
谢谢
javascript - 文档片段如何工作?
谁能简要解释一下 documentFragment 的实际作用?我一直在寻找一个明确的解释,但直到现在我才得到任何解释。
我读到的是,documentFragment 类似于 DOM 结构,我们可以在其中添加修改 DOM 元素而不会中断文档的实际流程。
我还读到,documentFragment 比将每个元素一个一个地附加到 DOM 中要快。在我看来,documentFragment 不会每次都重新计算样式,所以它更快。
我有两个例子,
以片段方式进行:
以正常方式进行:
上面两个例子中到底发生了什么?
javascript - 垃圾收集和 DocumentFragment
我读过一篇关于内存泄漏的文章,其中垃圾收集器逻辑总结为:
- 垃圾收集器建立一个“根”列表。根通常是在代码中保存引用的全局变量。在 JavaScript 中,“window”对象是可以充当根的全局变量的一个示例。窗口对象始终存在,因此垃圾收集器可以认为它及其所有子对象始终存在(即不是垃圾)。
- 所有根都经过检查并标记为活动的(即不是垃圾)。所有的孩子也被递归地检查。从根可以到达的所有东西都不被视为垃圾。
- 所有未标记为活动的内存现在都可以视为垃圾。收集器现在可以释放该内存并将其返回给操作系统。
此外,MDN 声明 DocumentFragment 不是活动DOM 树的一部分。
DocumentFragment 接口表示一个没有父级的最小文档对象。它用作 Document 的轻量级版本,它存储由节点组成的文档结构的一部分,就像标准文档一样。主要区别在于,由于文档片段不是活动文档树结构的一部分,因此对片段所做的更改不会影响文档、导致重排或在进行更改时产生任何性能影响。
一点一点我开始意识到背后的逻辑,但如果有人能对我有所启发,我将不胜感激:),使用下面的示例,并解释原因:
1. 将 DOM 引用无效后被认为是一种很好的做法。用过的。
2. 是否需要取消对 DocumentFragment 和包含它的元素的引用。
更新的片段