JavaScript 等价于 php DOMDocument 对象

标签 javascript php html regex domdocument

我用 PHP 编写了一个代码,用于解析我通过来自“wikipedia.org”的 API 请求收到的数据。
我使用 DOMDocument 类来解析数据,它工作得非常好。现在我想在 JavaScript 中做同样的工作。 API 请求返回(经过一点清理)这样的字符串:

$htmlString = "<ul>
    <li>Item 1</li>
    <li>Item 2</li>
</ul>
<ul>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
</ul>"

请注意,这只是一个示例。任何请求可能有不同数量的列表,但它始终是一系列无序列表。
我需要获取 <li> 中的文本标签和以下 PHP 代码运行良好。
$DOM = new DOMDocument;
$DOM->loadHTML($htmlString);
$lis = $DOM->getElementsByTagName('li');
$items =[];
for ($i = 0; $i < $lis->length; $i++) $items[] = $lis[$i]->nodeValue;

我在 $items 中得到数组 [Item 1,...,Item 5]我想要的变量。
现在我想在 JavaScript 中做同样的工作。那就是我有一个字符串
htmlString = "<ul>
    <li>Item 1</li>
    <li>Item 2</li>
</ul>
<ul>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
</ul>"

在 JavaScript 中,我想获取每个 <li> 中的文本标签。我在网上搜索了一个与 JavaScript 中的 PHP DOMDocument 等效的类,但令人惊讶的是,我什么也没找到。
任何想法如何在类似于 PHP 代码的(最好是 Vanilla)JavaScript 中做到这一点?
如果没有,是否知道如何在 JavaScript 中执行此操作(甚至可能使用正则表达式)?

最佳答案

使用DOMParser()

您移植的代码,与您的 PHP 非常相似:

let parser = new DOMParser()
let doc = parser.parseFromString(`<ul>
    <li>Item 1</li>
    <li>Item 2</li>
</ul>
<ul>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
</ul>`, "text/html")


let lis = doc.getElementsByTagName('li')
let items = []
for (let i = 0; i < lis.length; i++) items.push(lis[i].textContent)

console.log(items)

关于JavaScript 等价于 php DOMDocument 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61215347/

相关文章:

javascript - 交换对象上两个属性的值

javascript - 如何解决下拉长度问题

php - 我想改变多维数组的键

html - 阻止 Gmail 添加指向地址的链接?

html - 快速点击div时去除蓝框

javascript - 在 Node.js 中,读取 .html 文件的目录并在其中搜索元素属性?

javascript - 如何修复 Cordova/Phonegap 中的 iFrame 问题 (iOS)?

javascript - 从 SVG 对象检索信息

php 标签不工作/字符串不显示

PHP ucwords 回显 MySQL 变量