Селекторы cheerio / jquery: как получить список элементов во вложенных div?

Мне нужно разобрать некоторую разметку, подобную этой, со страницы html:

<div id="list">

  <div class="item-level-a">
    <div class="item-level-b">
      <a href="http://www.example.com/1"></a>
    </div>
  </div>

  <div class="item-level-a">
    <div class="item-level-b">
      <a href="http://www.example.com/2"></a>
    </div>
  </div>

  <div class="item-level-a">
    <div class="item-level-b">
      <a href="http://www.example.com/3"></a>
    </div>
  </div>

</div>

Я пробовал использовать этот код:

$list = [];
$('div[id="list"]').each(function() {
  var href = $(this).find('div > div > a').attribs('href');
  list.push(href);
});

без успеха: ошибка была:

TypeError: Object <a href="http://www.example.com/1"></a>
                  <a href="http://www.example.com/2"></a>
                  <a href="http://www.example.com/3"></a>
has no method 'attribs'

:-(.

Есть подсказка?


person MarcoS    schedule 18.09.2015    source источник


Ответы (2)


В cheerio и jquery вы получаете атрибуты с attr(), а не attrib().

Есть еще несколько проблем с вашим кодом. Вот рабочая версия с использованием cheerio. Вероятно, в jquery это тоже работает:

var list = [];
$('div[id="list"]').find('div > div > a').each(function (index, element) {
  list.push($(element).attr('href'));
});
console.dir(list);
person Trott    schedule 18.09.2015
comment
Здорово! Спасибо, это работает как шарм (сейчас я чувствую себя довольно тупым ... :-() - person MarcoS; 18.09.2015
comment
Не сомневайтесь в своем вопросе! Он предоставляет всю необходимую информацию для решения вашей проблемы, не перегружая ее множеством не относящихся к делу вещей. - person Trott; 18.09.2015
comment
Спасибо @Trott, я какое-то время пытался настроить таргетинг на html-элементы, и ваш пример мне очень помогает :) - person Kristiyan D Kovachev; 23.04.2018

Для тех, кто предпочитает функциональный стиль:

const list = $('div[id="list"]')
  .find('div > div > a')
  .toArray()
  .map(element => $(element).attr('href')));
person sdgfsdh    schedule 04.11.2019