Выберите узел с его дочерними элементами на основе его класса и превратите его в объект

Я хочу узнать, как очистить данные веб-сайта. Это интересующая меня часть html. Я использую cheerio для поиска данных, которые я нужно.

<td class="col-item-shopdetail">
    <div class="shoprate2 text-right hidden-xs">
        <div class="currbox-amount">
            <span class="item-searchvalue-curr">SGD</span>
            <span class="item-searchvalue-rate text-black">42.0000</span>
        </div>
        <div class="item-inverserate">TWD 100 = SGD 4.2</div>
        <div class="rateinfo">
            <span class="item-timeframe">12 hours ago</span>
        </div>
    </div>
    <div class="shopdetail text-left">
        <div class="item-shop">Al-Aman Exchange</div>
        <div class="item-shoplocation">
            <span class="item-location1"><span class="icon icon-location3"></span>Bedok</span>
            <span class="item-location2"><span class="icon iconfa-train"></span>Bedok                            </span>
        </div>
    </div>
</td>

Я хочу сделать класс «col-item-shopdetail» как объект и сохранить весь класс с именем «col-item-shopdetail» в массиве для доступа.

Поэтому, если возможно, это будет доступ, например, array.item-inverserate или через селектор cheerio, например

$('.col-item.shopdetail').children[0].children[0].children[1]

Я попытался просмотреть имена магазинов и магазинов в массиве и использовать другой цикл после завершения цикла имен, чтобы найти ставки. Затем попробуйте сопоставить ставки с именем, обратившись к тому же индексу массива. Однако это не сработало по неизвестной причине, когда каждый раз печатаемая ставка имеет разное значение, а индекс с одним и тем же именем различен при каждой попытке.

Это близко к тому, что я хочу, но это не работает:

как фильтровать объекты cheerio в `каждом` с помощью селектора?


person yk6    schedule 17.02.2018    source источник


Ответы (1)


Другими словами, вам нужен массив объектов, представляющих элементы класса .col-item-shopdetail, и каждый из этих объектов должен иметь свойство, соответствующее элементу .item-inverserate, который они содержат?

Вам нужен метод map.

my_array = $('.col-item-shopdetail').map(function(i, el) {
    // Build an object having only one property being the .item-inverserate text content
    return {
       itemInverserate: $(el).find('.item-inverserate').text()
    }; 
}).get();

// You can also directly target inverserate nodes 
// which will exclude empty entries ('shopdetail' that have no 'inverserate')
// Loop over .item-inverserate elements found
// somewhere in a .col-item-shopdetail
// (beware, space matters)
my_array = $('.col-item-shopdetail .item-inverserate').map(function(i, el) {
    // Build an object having only one property being the .item-inverserate text content
    return {itemInverserate: $(el).text()};

    // Note: If all you need is the inverserate value,
    // Why not avoiding an intermediate full object?
    // return $(el).text()
}).get();

Поскольку разработчики Cheerio построили свой API на основе jQuery с большинством основных методов, мы можем просто тестировать фрагменты кода в браузере...

my_array = $('.col-item-shopdetail').map(function(i, el) {
    return {
       itemInverserate: $(el).find('.item-inverserate').text()
    }; 
}).get();

console.log(my_array[0].itemInverserate)

my_array_2 = $('.col-item-shopdetail .item-inverserate').map(function(i, el) {
    // Build an object having only one property being the .item-inverserate text content
    return {itemInverserate: $(el).text()};
}).get();

console.log(my_array_2[0].itemInverserate)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table><tr><td class="col-item-shopdetail">
    <div class="shoprate2 text-right hidden-xs">
        <div class="currbox-amount">
            <span class="item-searchvalue-curr">SGD</span>
            <span class="item-searchvalue-rate text-black">42.0000</span>
        </div>
        <div class="item-inverserate">TWD 100 = SGD 4.2</div>
        <div class="rateinfo">
            <span class="item-timeframe">12 hours ago</span>
        </div>
    </div>
    <div class="shopdetail text-left">
        <div class="item-shop">Al-Aman Exchange</div>
        <div class="item-shoplocation">
            <span class="item-location1"><span class="icon icon-location3"></span>Bedok</span>
            <span class="item-location2"><span class="icon iconfa-train"></span>Bedok                            </span>
        </div>
    </div>
</td></tr>
</table>

person Stphane    schedule 17.02.2018