javascript - 如何遍历 HTML

标签 javascript html node.js typescript traversal

我有一个带有 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&amp;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 Define,并且当我尝试创建 DOMParser 时,DOMParser is not Defined。我是否错误地设置了类(class)?这是整个类的代码:

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;
}
}

最佳答案

您可以创建一个元素,然后将此字符串作为 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&amp;buildingID=britneyspears" alt="Image of BritneySpears"></div> \
        </div> \
        </div>';

let element = document.createElement("div");
element.innerHTML = htmlDocument;

console.log(element.querySelectorAll(".field-content")[1]); // <div class="field-content">9999 Hollywood Blvd</div>

( code in playground )

关于javascript - 如何遍历 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455849/

相关文章:

javascript - 运行文字效果

javascript - 如何在不更改原始参数数组的情况下操作传递给函数的 JavaScript 数组?

javascript - mysql 检索数据,为每个数据附加一个新行

node.js - Sequelize 在查询中添加 'id' 列,而我已经有一列定义为 PK

javascript - iframe 和 firefox 问题

javascript - jquery.Ajax数据获取

javascript - 更改 html 文档时保存注入(inject) svg 文件

javascript - 使用 split() 循环遍历数组,以逗号分隔项目

javascript - 如何在同一个 Nodejs 项目中混合 CoffeeScript 和 typescript 文件?

javascript - Node js 数组仪表板