Получите номер .class для каждого <h4> - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть следующий HTML:

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

Я хочу получить с cheerio per h4 количество элементов с классом .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 ] что я и хочу.

Но я думаю, что есть лучший способ получить число .highlight для каждого <h4>. Я знаю, что могу использовать return $('.highlight').length в карте (), но это дает мне больше информации, чем просто: [ 3, 3, 3, 2 ].

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Более кратким является:

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

или

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

Обратите внимание, что у карты cheerio (первая) есть дополнительный параметр i, который раздражает, но часто бывает полезен для этого.

0 голосов
/ 05 ноября 2018

А как насчет этого? В какой-то момент вам нужно будет переключить его с массива селекторов 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)
...