有没有比insertAdjacentHTML()和一个巨大的HTML字符串更好的方法将HTML插入DOM中
Are there better ways of inserting HTML into the DOM than insertAdjacentHTML() and a huge HTML string?
我需要在DOM中插入大量HTML。
我目前的方法是将需要插入的HTML复制粘贴到JS文件中,对其进行格式化,使其在字符串中没有错误,然后使用insertAdjacentHTML()
进行插入。
在JS中有一个巨大的、多行的复制粘贴HTML字符串,每次我滚动它时都会觉得很脏
唯一的限制是,如果可以的话,我真的想避免使用库。
在这种情况下,更好的是一个安全的实现,它提高了可读性。
即使您不希望使用HTML模板工具,您仍然可以以类似的方式包含HTML。
handlers.js网站包括一些示例,例如将HTML包含在.HTML文件中,选择元素并解析其内容:
您可以通过将模板包含在标记中来将其传递到浏览器。
<script id="entry-template" type="text/x-handlebars-template">
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
</script>
使用Handlebars.Compile 在JavaScript中编译模板
var source = $("#entry-template").html();
var template = Handlebars.compile(source);
在您的情况下,您可以将html中的type
属性替换为任何明显的属性,并通过调用document.querySelector("htmlString").innerHTML
来检索内容。
其他选项包括通过AJAX将HTML作为一个单独的文件加载,或者如果你很大胆,可以编写自己的transpiler来将HTML粘贴在Javascript中(这基本上就是React对JSX所做的)
最后需要考虑的一件事是:您需要确保注入的HTML不包括任何潜在的XSS漏洞,或者任何DOM事件都不会因为添加HTML而出错(尽管使用insertAdjacentHTML
应该可以防止事件中断)。
此外,请考虑查看我写的这段HTML注入代码,以确保避免(部分但不是全部)可能的陷阱:https://github.com/jsweeneydev/HTMLTemplate/blob/master/htmltemplate.js
祝你好运!
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 有更好的方法吗?(递归解析HTML unicode实体)
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 从网页获取数据的更好方法,而不是使用DOM和HTML元素
- 创建元素更好还是只在html上准备好它们
- 使用coffeescript/jQuery生成HTML比使用字符串更好
- 什么时候拥有更多或更少的html元素更好
- 具有固定顶行和左列的Excel样式HTML表格的更好实现?(jsFiddle 示例)
- 更好的做法是通过CSS类或直接(通过DOM)修改HTML元素显示
- 动态创建 HTML 表单的更好方法
- 用HTML表示新闻更好
- 哪一个更好,使用带有javascript或canvas的纯html
- 添加自定义属性以更好地分离 JavaScript 和 HTML
- 在HTML中使用JS的更好方法是什么?函数或选择器
- 在Javascript中从HTML中提取文本的更好方法
- 如何在返回值中换行?或者返回 HTML 的更好方法
- 更好地管理 Javascript 和 html 模板文件:编辑尽可能多的文件,但作为一个文件使用
- 是否应该将类或 id 添加到 HTML 文档中以获得更好的结构
- 在HTML中显示显示缩进的日志的更好方法是什么
- 在使用Ajax仅检索数据库中的数据之间,如何更好地从html结构中的数据库中检索数据