我在使用getElementsByTagName从javascript代码中提取正文时遇到问题。
var enc1 = '<HEAD></HEAD><BODY>test</BODY>';
var wrapper = document.createElement('div');
wrapper.innerHTML = enc1;
var converted = wrapper.getElementsByTagName("body");
var res = "Body of text: " + converted;
document.getElementById("demo").innerHTML = res;
<div id="demo"></div>
当我使用转换时,得到[对象HTMLCollection]。当我使用converted [0]时,我不确定。
我缺少什么吗?
[就像RobG在他的评论中说的那样,您不能在div内使用head或body标签。
大多数(如果不是全部的话),浏览器只会将“ test”写入包装器div。
您已经使用代码创建了以下内容:
<div>test</div>
因此,在尝试此行时发生错误:
var converted = wrapper.getElementsByTagName("body");
包装器div中没有body标签,因此转换后的内容为空的HTMLCollection []。
<head>
和<body>
比您的日常<div>
多一些。您只能将它们作为<html>
的直接后代。否则会导致未定义的行为。
html
当前无法创建类似的createElement
标签,您将需要创建一个新的document
,然后使用它来访问其.body
属性-.body.innerHTML
以获取HTML。] >
当前解析整个HTML文档的唯一方法是document.implementation.createHTMLDocument
和DOMParser
。 DOMParser
有点新鲜,所以我建议使用它。
const enc1 = '<HEAD></HEAD><BODY>test</BODY>'; const newDocument = (new DOMParser).parseFromString(enc1, 'text/html'); const converted = newDocument.body.innerHTML; const res = "Body of text: " + converted; document.getElementById("demo").innerHTML = res;
<div id="demo"></div>
<body>
标记永远不能在div内。您可以执行以下操作以提取正文中的文本: