我想从以下字符串中获取['http://www.1.com', 'http://www.2.com', 'http://www.3.com']
。
const cheerio = require('cheerio')
const htmlStr = `
<div>
<div class="item">
<a href="http://www.1.com"></a>
</div>
<div class="item">
<a href="http://www.2.com"></a>
</div>
<div class="item">
<a href="http://www.3.com"></a>
</div>
</div>
`
const $ = cheerio.load(htmlStr)
最初,我认为$(div.item a)
将返回一个元素数组。所以我尝试了:
const urls = $('div.item a').map(x => x.attr('href'))
失败。
似乎$('div.item a')
返回一个object
。
该怎么做?
谢谢!
答案 0 :(得分:2)
首先,cheerio的map
函数接受一个回调,其中第一个参数是当前的 index ,而不是必须再次包装在$(…)
中的元素。接下来,map
返回一个“ jQuery集”,而不是普通的JavaScript数组。使用toArray
:
$('div.item a').map((i, x) => $(x).attr('href')).toArray()
答案 1 :(得分:0)
想出另一种方式:
$('div.item a').get().map(x => $(x).attr('href'))
get()
检索所有匹配的元素。