【发布时间】:2016-11-12 00:32:58
【问题描述】:
好的,我已经知道我可以使用以下方法获取整个 HTML 文档的标记(减去 DOCTYPE):
document.documentElement.outerHTML
但是,这只会让我得到原始源标记,而不是 DOM 的当前状态,而这正是我正在寻找的。对于我的即时需求,我真的只想在文档中保留表单的状态(将其视为自动保存)。
- 请注意,这不是用于标准网站/webapp 格式的,因此不能进行发布、提交等操作。我需要一种纯 JavaScript 方式来获取当前 DOM 树的 HTML 字符串表示,因此外部调用者可以将其保存到磁盘以供以后使用。
现在我知道我可以手动遍历所有表单元素,获取每个值,并对上述 outerHTML 的结果进行字符串替换(通过正则表达式),以构建反映当前 DOM 的 HTML 字符串,但我希望有一种更简单的方法来做到这一点(也许是内置的)。就像一个 DOM 到 HTML 解析器/编写器。
但是到目前为止,我还没有找到一种内置的方法来做到这一点。只是想伸出手,看看是否有其他人需要这样做。并在我开始实施之前询问我上面提出的方法是否是解决这个特定问题的最佳方法。
【问题讨论】:
-
Afaik,你错了,调用
outerHTML或innerHTML确实在调用时得到了标记原样,而不是原始来源。但是,它并没有为您提供属性,无论如何您都不需要这样做。 -
[...]however that will only get me the original source markup, and not the current state of the DOM[...]这不是真的,outerHTML将返回当前源标记。您的问题是表单元素持有的当前值作为属性存储在 html 元素中,而不是作为属性。并且只有属性是 html 代码的一部分。 -
好的,是的,我弄错了(它只是在我正在使用的示例中出现)。所以我应该可以用JS来更新DOM,在必要的地方添加合适的value属性(基于value属性),然后用outerHTML把文档作为字符串获取。让我试一试。
-
这里的要点是,不应该有任何理由存储页面的整个 HTML 来记住某些状态。将表单序列化为有用的格式,例如对象。
标签: javascript html dom