问题标签 [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 - 在这种情况下,使用片段而不是 html 字符串有什么优势吗?
我正在编写一个聊天应用程序,它变得有点复杂,因为我希望它具有交付确认、消息缓存等功能。
现在,我处理消息缓存的方式是:
用户点击对话
从服务器获取的第一批消息存储在数组内部的“块”中。
- 每个块都是一个文档片段,附加了n条消息(DOM 元素)。
- 当用户向上滚动时,更多的块(片段)被添加到数组中,因为它们是从服务器获取的。
- 当用户转到另一个对话,但随后决定加载之前加载的对话时,脚本会将所有片段附加到一个片段中,并将大片段附加到消息窗口中。
如果用户已经获取了大量消息,那么带有消息“块”的数组会如下所示:
每个片段内部附加了大约 10 条消息。
在使用片段之前,我通过获取每条消息的 HTML 表示来使用字符串。像这样的东西:
我决定使用片段,因为我发现操作每条消息更容易(通过像 fragment.getElementById 这样的操作),而不是必须使用 innerHTML 来解析字符串和操作元素。
但是,我现在质疑这是否是正确的选择,因为我不知道将片段保存在数组中是否实际上是内存密集型的,或者至少比字符串更密集。另一个缺点是现在,如果我想将片段存储在 中localStorage
,我必须将每个片段的内容转换为 HTML 字符串,当我想localStorage
与我的片段系统一起使用时,我必须转换每个 HTML 字符串回到文档片段。
使用片段似乎更自然,但现在我正在考虑返回保留 HTML 字符串。不过,这有点工作,因为我不再有旧代码了。
在这种情况下,使用片段而不是 HTML 字符串有什么好处吗?
谢谢你。
javascript - 在使用 JavaScript 附加到 DOM 之前随机打乱现有的文档片段
我有一个通过 javascript 动态生成的文本区域和按钮。我让它工作,以便当在文本区域中输入一个值,然后单击按钮时,将创建随机数量的 SPAN 标签。对于文本区域中值的每个字符,都会创建一个带有 hidden 属性的 span 标签。
这是一个工作小提琴: https ://jsfiddle.net/9feso12c/
使用 JavaScript,我将这些跨度附加到文档片段中。如果我将文档片段附加到容器中,则所有跨度都会按顺序附加到 DOM。我想要的是“打乱”文档片段,然后将其附加到 DOM。
当在文本区域中输入 HELLO 并单击按钮时,我现在拥有的内容:
我想要的是:
dom - jsoup 等价于 DOM Range 操作,例如 extractContents() 等
我正在尝试通过 jsoup DOM 模型提取和替换 JavaScript DocumentFragments 的等价物。
有没有人有一些现成的代码来模拟DOM 范围选择和操作?我想选择一个文本范围,它可能会通过多个内联节点(例如 <a>、<span> 等),在此类内联节点的中间开始或结束等。在 JavaScript 中,使用 Range 很容易操作,从其中提取 DocumentFragment,围绕它等。我猜 JavaScript Range 正在根据需要拆分内部节点,以正确处理此类提取和插入。我将如何使用 Java 中的 jsoup 执行此操作?
编辑:只是大声思考如何做到这一点 - 可能需要在我的范围内搜索“峰值”元素,然后转到范围的开始和结束,并通过跳跃将它们“提升”到“峰值水平”如果我的开始是孩子没有,则给父母。0,或者在范围开始元素之前拆分元素子列表......如果有这样的代码准备好,我宁愿重新使用它,否则将不得不从头开始编写。
2015 年 12 月 18 日更新:用我开发的工作代码发布了我的答案,见下文。
javascript - 将 SVG 元素附加到 Document Fragment 和 SVG GROUP 之间是否存在性能差异
我读到有时最好先将 DOM 元素附加到文档片段以避免重排(https://developer.mozilla.org/de/docs/Web/API/Document/createDocumentFragment)。
使用 SVG 我想知道在附加到 DOM 树之前附加所有 SVG 元素之间是否存在(性能)差异
- 文档片段
- 一个 SVG 组元素(尚未附加到 DOM 树)
也许有人有线索。
javascript - 文档片段 VS 创建了未附加的 div
使用文档片段或未附加的创建的 div 以避免多次命中 DOM 之间有区别吗?
假设我们要生成 100 个列表项......
我们页面的内容:
场景一:文档片段
在这种情况下,我们正在创建 li,用一些简单的文本填充它,然后将其附加到片段中。循环完成后,片段将附加到列表中。我们避免对 DOM 100x 执行 ping 操作,并且仅 ping 一次以附加片段。
场景 2:未附加的 div
在这种情况下,我们创建一个 div,它的作用类似于文档片段,因为它不在 DOM 中。我们将所有创建的 li 附加到 div 中,最后将 div 的内容附加到 DOM 中的列表中。
这两种情况有什么区别?就避免多次 ping DOM 而言,似乎两者都达到了相同的结果。
javascript - 为什么我的 appendChild 不能与 createDocumentFragment 一起使用?
我正在尝试将新创建的元素附加到 div,然后将 div 附加到文档片段,但它没有按预期工作。请帮助我确定我缺少什么。
据我了解,您应该能够将所有内容附加到 div,然后将 div 附加到片段。当我运行代码时,没有对 DOM 进行任何修改。我认为这可能是因为范围界定,或者第二个 json 请求设置不正确
javascript - 检查 DocumentFragment 是否为普通节点
我相信我的问题很简单,但是在花了一些时间搜索之后,我找不到令人满意的解决方案。
我有一个 DocumentFragment 元素,我想检查它是否完全被某个 html 标签包裹。这是我试图将其转换为 JavaScript 的伪代码:
对于 DocumentFragment,例如:
该函数应返回 span 对象。
但是对于像这样的片段:
它应该返回未定义。
javascript - 窗口/文档准备好后如何删除预加载器
我有一个 css 预加载器,我想在页面加载时显示它。这是可见的。但是我想在页面加载后/一旦窗口/文档准备好后删除它。这是我遇到困难的部分。
我在控制台中得到以下信息:
未捕获的类型错误:无法读取 null 的属性“样式”。在 script.js 文件的第 40 行,即:preloader.style.opacity = 1;
我附上了一个包含所有相关代码的 JS Fiddle。 https://jsfiddle.net/kultura/xpa4vz8e/
当我开始尝试学习 javascript 时,我想为这个特定示例找到一个使用严格 javascript 的解决方案。
到目前为止,我已经将脚本进一步向下移动,就在标签结束之前。控制台在警告 id 'preload' 时也会返回 null,所以根据我的发现,我不确定它是否与调用时无法访问的元素有关getElementById
您的帮助和清晰将不胜感激。多谢你们!