获取每个<h4>的.class编号

时间:2018-11-04 21:09:24

标签: jquery cheerio

我有以下HTML:

identifier  var1  var2  var3
sample_A    30    D     red
sample_B.1  28    D     orange
sample_B.2        N
sample_C.1  27    E     orange
sample_C.2  32          yellow
sample_C.3              green

我希望每h4可以得到<div class="ratings"> <h4> <a href="https://www.horoscope.com/star-ratings/today/aquarius"> Sex <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled"></i> <i class="icon-star-filled"></i> </a> </h4> <h4> <a href="https://www.horoscope.com/star-ratings/today/aquarius"> Hustle <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled"></i> <i class="icon-star-filled"></i> </a> </h4> <h4> <a href="https://www.horoscope.com/star-ratings/today/aquarius"> Vibe <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled"></i> <i class="icon-star-filled"></i> </a> </h4> <h4> <a href="https://www.horoscope.com/star-ratings/today/aquarius"> Success <i class="icon-star-filled highlight"></i> <i class="icon-star-filled highlight"></i> <i class="icon-star-filled"></i> <i class="icon-star-filled"></i> <i class="icon-star-filled"></i> </a> </h4> </div> 类的元素数量。

为此,我执行了以下操作:

.highlight

这将返回:

let $ = cheerio.load(response.data); let zodiacRatings = $('.ratings>h4'); let ratings = []; rawZodiacRatings.map((key, val) => { let $ = cheerio.load(val); ratings.push($('.highlight').length); }); console.log(ratings); 是我想要的。

但是我认为有一种更好的方法来获取每个[ 3, 3, 3, 2 ]的{​​{1}}的数量。我知道我可以在map()中使用.highlight,但这确实给了我更多信息,不仅仅是:<h4>

2 个答案:

答案 0 :(得分:2)

那呢?在某个时候,您需要将其从jQuery选择器数组切换到数组。

//switch it from jquery selectors to an actual array
let zodiacRatings = $('.ratings>h4').toArray();
//return a new array with the number lengths selected.
let ratings = zodiacRatings.map(x=>{
     return $(x).find('.highlight').length
 })  

console.log(ratings)

答案 1 :(得分:1)

更简洁的是:

$('h4').map((i, el) => $(el).find('.highlight').length).get()

$('h4').get().map((el) => $(el).find('.highlight').length)

请注意,cheerio贴图(第一个)具有一个额外的i参数,这很烦人,但通常这样做很有用。