【发布时间】:2017-03-20 05:53:58
【问题描述】:
我有一个带有 HTML 代码的变量:
let htmlDocument = '<div id="buildings-wrapper"> \
<div id="building-info"> \
<h2><span class="field-content">Britney Spears' House</span></h2> \
<div class="building-field"> \
<div class="field-content">9999 Hollywood Blvd</div> \
</div> \
<div class="building-field"> \
<div class="field-content">Building Hours: Mon. 07:00-23:00 Tue.-Fri. 06:30-22:00, Sat. 07:30-18:00, Sun. 12:00-18:00 Holidays - Closed</div> \
</div> \
<div class="building-field"> \
<div class="field-content"><a href="http://www.britneyspears.com">Locate on the stars map</a></div> \
</div> \
</div> \
<div id="building-image"> \
<div class="field-content"><img src="../../../../ssc.adm.britneyspears.com/classroomservices/image/viewimage?userEvent=ShowBuildingImage&buildingID=britneyspears" alt="Image of BritneySpears"></div> \
</div> \
</div>';
我想遍历变量并将这部分 HTML 存储在一个单独的变量中:
<div class="field-content">9999 Hollywood Blvd</div>
这是我目前所拥有的:
public traverseHTML(htmlDocument: any): any {
let htmlBlock: any;
let divs: any = htmlDocument.getElementsByTagName('div');
for (var i = 0; i < divs.length; i++) {
if (divs[i].getAttribute("id") == "field-content") {
htmlBlock = divs[i];
}
}
return htmlBlock;
}
我确定我的功能存在各种问题,但我无法解决它们,因为我什至无法通过第二行。我收到一条错误消息,提示 htmlDocument.getElementsByTagName 不是函数。如何通过 div 遍历 HTML?
请注意,由于项目规范,我不能使用 JQuery。
编辑:
当我尝试document.createElement('div') 时收到document is not defined,而当我尝试创建 DOMParser 时未定义 DOMParser。我设置的课程不正确吗?这是整个类的代码:
import parse5 = require('parse5');
import {ASTNode} from 'parse5';
export default class DSController {
//private parser: DOMParser;
constructor() {
//this.parser = new DOMParser();
}
public traverseHTML(htmlDocument: any): any {
let parser = new DOMParser();
let parsed: any = parser.parseFromString(htmlDocument, "text/html");
let selectParsed: any = parsed.querySelectorAll('field-content')[1];
console.log(selectParsed);
return selectParsed;
/* let element = document.createElement("div");
element.innerHTML = htmlDocument;
console.log(element.querySelectorAll(".field-content")[1]); // <div class="field-content">9999 Hollywood Blvd</div>
*/
}
public parseHTML(): any {
//let document: parse5.ASTNode;
return;
}
}
【问题讨论】:
-
不能遍历字符串。您只能在实际的 DOM 上执行此操作
-
@NitzanTomer 哦。 :( 如果我的项目文件夹中有一个名为 BRITNEYSPEARS 的文件,其中包含上面的 HTML 代码,我将如何引用它以便遍历它?
-
如果您向您的客户/老板解释完成这样的事情需要多少小时,那么阻止您使用 jquery 的“项目规范”几乎肯定会消失,您可以使用正确的工具在几分钟内解决。当然,除非您的客户喜欢花钱请人重新发明轮子。
-
@Paul 这是给学校的,所以不管项目描述怎么说,不幸的是。
-
@Azamantes 直到现在我才知道多行字符串的反引号!
标签: javascript html node.js typescript traversal