使用javascript从文本获取DOM正文

问题描述 投票:-1回答:3

我在使用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>

jsfiddle

当我使用转换时,得到[对象HTMLCollection]。当我使用converted [0]时,我不确定。

我缺少什么吗?

javascript html getelementsbytagname
3个回答
0
投票

[就像RobG在他的评论中说的那样,您不能在div内使用head或body标签。

大多数(如果不是全部的话),浏览器只会将“ test”写入包装器div。

您已经使用代码创建了以下内容:

<div>test</div>

因此,在尝试此行时发生错误:

var converted = wrapper.getElementsByTagName("body");

包装器div中没有​​body标签,因此转换后的内容为空的HTMLCollection []。


0
投票

<head><body>比您的日常<div>多一些。您只能将它们作为<html>的直接后代。否则会导致未定义的行为。

html当前无法创建类似的createElement标签,您将需要创建一个新的document,然后使用它来访问其.body属性-.body.innerHTML以获取HTML。] >

当前解析整个HTML文档的唯一方法是document.implementation.createHTMLDocumentDOMParserDOMParser有点新鲜,所以我建议使用它。

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>

0
投票

<body>标记永远不能在div内。您可以执行以下操作以提取正文中的文本:

© www.soinside.com 2019 - 2024. All rights reserved.