javascript - 如何将 DIV 和 SCRIPT 从单个 HTML 模板插入页面
问题描述
我有一个 HTML 模板,其中包括一个 DIV(包含一个按钮)和一个脚本,该脚本将包含一个在单击该按钮时调用的函数(通过$.get()
into检索的 template.html var text
):
<div id="CLC_Form">
various text and checkbox inputs go here...
<br>
<input type="button" id="close_clc" value="Done" onclick="CLC_Done()" />
</div>
<script>
function CLC_Done() {
document.getElementById("CLC_Form").style.display = "none";
}
</script>
但是在 中.get callback()
,我不能appendChild(text)
将此 HTML 内容添加到 中,BODY
因为它是字符串,而不是实际的 HTML 元素。
我可以createElement('div')
和createElement("script")
, 并从模板中为每个模板插入 innerHTML,但是我的模板必须只有 div 和脚本的 innerHTML,没有它们的div
andscript
标记,这使得模板代码对于它是什么含糊不清。它看起来就像“松散的代码”,我必须有两个单独的模板才能做到这一点。
我要插入的页面如下所示(之前的 index.html):
<body>
<div style="padding:20px;">
<div style="clear:both; margin-bottom:32px;">
Some stuff
</div>
<div id="aPanels"></div>
<div id="bPanels"></div>
<div id="cPanels"></div>
</div>
</body>
我想要实现的最终结果如下所示(index.html 之后):
<body>
<div style="padding:20px;">
<div style="clear:both; margin-bottom:32px;">
Some stuff
</div>
<div id="aPanels"></div>
<div id="bPanels"></div>
<div id="cPanels"></div>
<div id="CLC_Form">
various text and checkbox inputs go here...
<br>
<input type="button" id="close_clc" value="Done" onclick="CLC_Done()" />
</div>
<script>
function CLC_Done() {
document.getElementById("CLC_Form").style.display = "none";
}
</script>
</div>
</body>
有没有办法做到这一点?还是我必须 从两个单独的模板中createElement()
设置?.innerHTML
如果需要,我可以使用 jQuery,但更喜欢 vanilla js。
解决方案
您可以创建一个documentFragment
并设置它的innerHTML
. 除非您附加它,否则它在 DOM 中不存在,并且当您附加它时,片段将完全替换为.innerHTML
let fragment = document.createFragment();
fragment.innerHTML = text;
document.body.appendChild(fragment);
DocumentFragments
是 DOM 节点。它们绝不是主 DOM 树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到 DOM 树。在 DOM 树中,文档片段被其所有子级替换。https://developer.mozilla.org/en-US/docs/Web/API/Document/createDocumentFragment
推荐阅读
- java - 在 Hibernate 中连接表时如何忽略某些列?
- swift - 为什么有时 Swift 需要明确指出参数而有时不需要?
- oracle - Oracle Apex 中基于页面项值的授权方案
- c# - 如何将 sql 查询的结果添加到现有的数据读取器
- python - 如何将长十进制数字四舍五入为 0.00 格式
- python - 将字典转换为 pandas DF
- c - C - 递归链表反向:为什么使用双指针?
- android - Android Kotlin Firebase 如何更新记录中的值
- c - c代码与python的进程间通信
- python-3.x - 为什么 isalpha() 不能清理用户输入?