我需要获取网页中某个元素的实际 html 代码。
例如,如果元素中的实际 html 代码是 "How to fix"
运行这个 JavaScript:
getElementById('myE').innerHTML
给我 "How to fix"
这是解析后的 HTML。
如何使用 JavaScript 获取未解析的 "How to fix"
?
最佳答案
您无法获取网页部分的实际 HTML 源代码。
当您为 Web 浏览器提供 HTML 页面时,它会将 HTML 解析为一些 DOM 节点,就浏览器而言,这些节点是文档的最终版本。 DOM 保留了来自 HTML 的重要信息——比如你在单词 fix
之前使用了 Unicode 字符 U+00A0 不间断空格——但没有保留你通过实体使用它的不相关信息引用,而不仅仅是原始输入 (
)。
当您向浏览器询问元素节点的 innerHTML
时,它不会为您提供经过解析以生成该节点的原始 HTML 源代码,因为它不再具有该信息。相反,它会根据存储在 DOM 中的数据生成新的 HTML。浏览器决定如何格式化 HTML 序列化;不同的浏览器会生成不同的 HTML,并且很可能与您最初设置格式的方式不同。
特别是,
元素名称可以是大写或小写;
属性的顺序可能与您在 HTML 中声明的顺序不同;
属性引用可能与您的来源不同。 IE 经常生成不带引号的属性,这些属性甚至不是有效的 HTML;您可以确定的是,通过将生成的
innerHTML
写入另一个元素的innerHTML
; ,生成的 除字符外,它不能使用实体引用,否则无法直接包含在文本内容中:& 符号、小于号和属性值引号。它可能不会返回
innerHTML
可以在同一浏览器中安全使用
您可能无法看到那是一个不间断的空格,但它仍然是一个,如果您将该 HTML 插入到另一个元素中,它将充当一个。您不需要在任何地方依赖实体转义为
的不间断空格字符...如果您这样做,出于某种原因,您可以通过以下方式获得:
x= el.innerHTML.replace(/\xA0/g, ' ')
但这只是转义 U+00A0 而不是其他数千个可能的 Unicode 字符中的任何一个,所以这有点值得怀疑。
如果您真的需要获取页面的实际源 HTML,您可以对您自己的 URL (location.href
) 生成一个 XMLHttpRequest
并获取完整的、未解析的responseText
中的 HTML 源代码。几乎没有理由这样做。
关于javascript - 使用 JavaScript 获取未解析的(原始)HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3905219/