HTML解析器用text/html类型解析时返回null而非错误的问题
为什么DOMParser的text/html模式不生成parsererror,而application/xml模式可以?
当你移除<p>标签的闭合标签后,两种解析模式表现不同的核心原因是HTML与XML解析器的规则差异:
HTML解析器(text/html模式)的容错特性
HTML解析器是为兼容历史上大量不规范的网页代码设计的,具备极强的自动修复能力。遇到未闭合的<p>标签时,它会自动在合适的位置补全</p>(比如遇到文档结束、后续块级元素时),整个解析过程不会触发错误,因此不会生成parsererror节点。
以你提供的示例代码为例,解析后的DOM结构里,缺失的</p>会被自动补在</body>之前,最终的HTML结构是完整的。XML解析器(application/xml模式)的严格语法要求
XML遵循严格的语法规则,所有标签必须成对闭合,任何语法不规范都会直接触发解析错误。DOMParser在这种模式下会将错误信息封装到parsererror节点中,所以你能正常获取到该节点。
你可以通过以下代码验证HTML解析器的自动补全行为:
const code = `<!DOCTYPE html> <html> <head> <style> h1 {color:red;} p {color:blue;} </style> </head> <body> <h1>This is a heading</h1> <p>This is a paragraph.</p </body> </html>`; var parser = new DOMParser(); const doc = parser.parseFromString(code, "text/html"); console.log(doc.body.innerHTML); // 输出会显示已补全</p>的完整结构
内容的提问来源于stack exchange,提问作者Hemanth Reddy
相关产品推荐
相关产品推荐

