cheerio选择列表

时间:2015-09-21 19:03:08

标签: node.js jquery-selectors cheerio

在我需要抓取的页面上(使用node.js和cheerio),我有这样的模式:

<h2>
  <span id="2015"></span>
  <span class="ignore-me"></span>
</h2>
<div>
  <ol>
    <li>
      <a title="TITLE1" href="HREF1"></a>
      <a class="image" title="ignore-me-1" href="ignore-me-1"></a>
    </li>
    ...
    <li>
      <a title="TITLE2" href="HREF2"></a>
      <a class="image" title="ignore-me-2" href="ignore-me-2"></a>
    </li>
  </ol>
</div>

我想提取一个带有TRELE和HREF的列表。

我正在尝试这样的事情:

$('h2 > span[id="2015"]').next('ol > li > a').each(function(index, element) {
  console.log('title:', element.attr('title'), 'href:', element.attr('href'));
});

没有成功(永远不会输入each循环...)。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

h2标记没有ID,因此您的选择器找不到任何结果,无需循环。

您可以通过循环锚标签轻松完成。

$("a").each(function(i, e) {
    if (e.attr('title') && e.attr('href')) console.log("... stuff ...");
});

或者您可以为h2提供ID,或从选择器中删除ID。循环的方法很多。

答案 1 :(得分:1)

ol元素实际上不是span#2015的下一个元素。 ol元素位于div内,h2$('h2 > span[id="2015"]') .parent() .next('div') .find('ol > li > a:not([class])') .each(function() { var $el = $(this); console.log('title:', $el.attr('title'), 'href:', $el.attr('href')); }); 的下一个元素。正确的树遍历是:

FALSE