cheerio/jquery选择器:如何获取嵌套div中的元素列表?

Mar*_*coS 7 jquery-selectors node.js cheerio

我需要从一个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>
Run Code Online (Sandbox Code Playgroud)

我确实尝试过这段代码:

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

没有成功:错误是:

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'
Run Code Online (Sandbox Code Playgroud)

:-(.

任何线索?

Tro*_*ott 10

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);
Run Code Online (Sandbox Code Playgroud)

  • 对你的问题感觉很好!它提供了一个人们希望解决问题的所有相关信息,而不会产生大量无关紧要的东西. (4认同)
  • 大!谢谢,它就像一个魅力(我现在感觉很蠢...... :-() (2认同)

sdg*_*sdh 8

对于那些喜欢功能性风格的人:

const list = $('div[id="list"]')
  .find('div > div > a')
  .toArray()
  .map(element => $(element).attr('href')));
Run Code Online (Sandbox Code Playgroud)