1

我目前正在使用 innerHTML 来检索 HTML 元素的内容,并且我发现在某些浏览器中它并不能准确返回源中的内容。

例如,在 Firefox 中的以下行中使用 innerHTML:

<div id="test"><strong>Bold text</strong></strong></div>

将返回:

<strong>Bold text</strong>

在 IE 中,它返回原始字符串,带有两个关闭的强标签。我假设在大多数情况下,Firefox 清理不正确的代码不是问题(并且可能是一个好处)。但是,对于我要完成的工作,我需要原始 HTML 源代码中出现的确切代码。

这是可能吗?我可以使用另一个 Javascript 函数吗?

4

6 回答 6

3

我认为您不会在现代浏览器中收到不正确的 HTML 代码。这是正确的行为,因为您没有动态生成的 HTML 的来源。例如,Firefox'innerHTML返回以字符串表示的DOM 树的一部分。不是 HTML 源代码。这不是问题,因为</strong>无论如何浏览器都会忽略第二个标签。

于 2010-01-13T20:07:32.307 回答
2

innerHTML不是从文档的实际来源生成的,即。HTML 文件,但派生自浏览器呈现的 DOM 对象。因此,如果 IE 以某种方式向您显示不正确的 HTML 代码,那么它可能是某种错误。没有这样的方法可以在每个浏览器中检索无效的 HTML 代码。

于 2010-01-13T20:08:38.713 回答
1

如果您不需要 HTML 来呈现(例如,您将把它用作 JS 模板或其他东西),您可以将它放在 textarea 中并使用 innerHTML 检索内容。

<textarea id="myTemplate"><div id="test"><strong>Bold text</strong></strong></div></textarea>

接着:

$('#myTemplate').html() === '<div id="test"><strong>Bold text</strong></strong></div>'

除此之外,浏览器决定如何解释 HTML,它只会返回它的解释,而不是原始的。

于 2010-01-16T04:50:08.790 回答
1

由于 Ivan 和 Andris 所说的原因,您通常无法获得原始的无效 HTML。

IE 也像 Firefox 一样“修复”您的代码,尽管在序列化过程中您不会注意到,方法是创建一个 Element 节点,其 tagName/strong对应于虚假的结束标签。完全不能保证 IE 会通过解析/序列化循环保留其他无效标记结构。

事实上,即使对于有效代码,输出innerHTML也不会与输入完全相同。不维护属性顺序,不维护 tagName 大小写(IE 给你<STRONG>),空格是丢失的各个地方,不维护实体引用,等等。如果您“需要确切的代码”,则必须保留一份准确代码的副本,例如在<script>相关内容之后编写的块中的 JavaScript 变量中。

于 2010-01-13T20:27:25.553 回答
0

你必须使用innerXML财产。它完全符合您的要求。

于 2010-01-13T20:06:22.997 回答
0

内部文本?还是有同样的效果?

于 2010-01-13T19:59:37.410 回答