亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

相當于 php DOMDocument 對象的 JavaScript

相當于 php DOMDocument 對象的 JavaScript

夢里花落0921 2023-12-19 21:25:55
我用 PHP 編寫了一段代碼,用于解析通過“wikipedia.org”的 API 請求收到的數據。 我使用 DOMDocument 類來解析數據,它工作得很好?,F在我想用 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 等效的類,但令人驚訝的是我什么也沒找到。 有什么想法如何在(最好是 Vanilla)JavaScript 中類似于 PHP 代碼來做到這一點? 如果沒有,知道如何在 JavaScript 中執行此操作(甚至可能使用正則表達式)嗎?
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

使用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)


查看完整回答
反對 回復 2023-12-19
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

如果您嚴格使用字符串,則需要使用正則表達式。

僅供參考 我正在使用 ES20xx 語法。如果您不支持此功能,則需要轉換為您的用戶可以訪問的語法。

這里我有一個表達式,它捕獲開始 <ul> 或 <li> 和結束標記之間的任何內容。然后我使用換行符將字符串拆分為數組。我們需要從結果數組中過濾掉空元素,最后在最終數組中返回所需的項目。

var 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>`;


var lis = htmlString.replace(/<ul>|<li>(.*)<\/li>|<\/ul>/g, '$1').split('\n');


var items = lis

    .filter(item => {

        if (item && item !== null && item !== '') {

            return item;

        }

    })

    .map(item => {

        var element = item.replace(/\s{2,}/g, '');


        return element;

    });


console.log('items array.', items);


查看完整回答
反對 回復 2023-12-19
  • 2 回答
  • 0 關注
  • 213 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號