如何通过JavaScript获取静态的原始HTML源代码? 当开发一个工具(我在这里不考虑重要的细节,考虑到我能够开发下面的)时,我注意到,至少在我的桌面上的Chrome和Firefox版本中,我从innerHTML属性中获得的字符串与我在HTML文件中静态编写的原始源代码不相等

如何通过JavaScript获取静态的原始HTML源代码? 当开发一个工具(我在这里不考虑重要的细节,考虑到我能够开发下面的)时,我注意到,至少在我的桌面上的Chrome和Firefox版本中,我从innerHTML属性中获得的字符串与我在HTML文件中静态编写的原始源代码不相等,javascript,html,dom,browser,Javascript,Html,Dom,Browser,console.log(document.querySelector(“div”).innerHTML); /* 你好 世界 */ 你好 世界 浏览器下载HTML源代码并将其解析为DOM(文档对象模型)。任何问题都会得到尽可能好的解决,可以在源代码中省略的元素可能会添加到DOM中 从那一刻起,这个内存结构就被用来呈现页面,它就是JavaScript中所指的这个结构。因此,如果您请求元素的innerHTML,您只需要获得一段基于DOM呈现的HTML源代码。原始源代码在JavaScript中根本不

console.log(document.querySelector(“div”).innerHTML);
/*
你好
世界
*/

你好
世界

浏览器下载HTML源代码并将其解析为DOM(文档对象模型)。任何问题都会得到尽可能好的解决,可以在源代码中省略的元素可能会添加到DOM中

从那一刻起,这个内存结构就被用来呈现页面,它就是JavaScript中所指的这个结构。因此,如果您请求元素的innerHTML,您只需要获得一段基于DOM呈现的HTML源代码。原始源代码在JavaScript中根本不可用

所以,这就是它发生的原因。而且你对此也无能为力。我认为唯一的解决办法是使用AJAX将整个页面重新加载到一个字符串中,然后自己获取所需的源代码


但显然,更好的解决方案是删除这些“误用”并使HTML源代码有效。如果您只需要在页面中包含一些信息供JavaScript单独使用,您可以选择嵌入一个
脚本
标记,用这些值初始化几个变量,而不是生成一些无效的HTML。

我以前在工作中尝试过这样做。在我的一些解决方案中,我构建了一个表,表行围绕着我想要使用的表数据元素,这样我就可以使用表数据了。如果您想在javascript方面做更多的处理,您可以做如下操作:

<div>
    <div class="td">Hello</div>
    <div class="td">World</div>
</div>

你好
世界

然后,您可以使用javascript处理这个问题,将div.td转换为实际的td。只是一个想法。

你可能想看看这里,但它可能不是你问题的答案:链接是相关的,但仍然不能解决我的问题。。。不管怎么说,这是一个信息:D谢谢!试图将
td
误用为
div
的子项的行为无效。您无法设置
td
元素的样式或在脚本中访问它们,因为它们不存在
标记被忽略。您提出了一个有效的问题,但我想知道您是否有一个有效的用例,在这个用例中,这可能会导致代码中出现问题。当您这样做时,我希望修复将是简单而明显的——但是尝试使用灵活的语法原型工具预测所有可能的问题既不简单也不明显,而且可能会浪费大量时间。正如Jukka指出的,您的第二个示例并不完全是一个有效的用例。。。你们都是对的,它在普通HTML中无效。但是我的工具实际上填补了由于缺少
标记而留下的空白,在本例中,通过在运行时插入这些
,试图降低标记的复杂性。这是一个页面原型的内部解决方案,实际上它已经很好地工作了,但是我想通过消除这个障碍来改进它。感谢您的回复!嗯,我完全同意你的看法,但是我选择ommit的背景信息让事情变得更复杂:这是一个内部(仅限工作场所)工具,可以实现更快的HTML原型。其思想是允许第二种可能的语法(比HTML的默认语法更灵活)在页面上标记元素。这听起来很愚蠢,但进行得相当不错(我已经用这个工具构建了10多页的原型),直到我被这个障碍所困扰。还有一件事:它意味着离线运行,因此没有AJAX可以工作,不幸的是:/您可以在服务器端进行预渲染,因此发送到浏览器的HTML实际上是有效的。可以将其视为论坛上的标记语言,如
[bbcode]
,甚至可以将StackOverflow上的反勾号和星号用于将文本标记为代码或使其粗体或斜体。同样,您可以在服务器上更正实际的HTML,或者将自己的fantasy标记扩展为实际的HTML。只要你将有效的HTML发送到浏览器,因为浏览器就不那么宽容,它会删除/忽略它不理解的所有内容。好吧。。。这确实令人鼓舞。作为我最初问题的替代解决方案,我几乎可以像您所说的那样,只做客户端,仍然是:只要想要HTML内容,就使用BB代码。例如,在
[div]
中提供
[td]
(就浏览器而言,这只意味着纯文本)。然后,JavaScript可以将类似BB的代码转换为HTML,填补这两者之间的空白:D谢谢!如果几天后有其他更简单的解决方案出现,您的解决方案将被选中:)“原始的[HTML]源代码在JavaScript中根本不可用”是不对的。您可以访问一些原始HTML,但只能访问属性。那也行:)谢谢你的回答!我能想到的唯一问题是需要更重的语法,什么样的语法破坏了我的工具的用途,它应该使用一种非常轻、简单的带有自定义“元素”的“方言”(实际上,只是包含大量常规HTML元素的模板)。