在我需要抓取的页面上(使用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
循环...)。
有什么建议吗?
答案 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