Node.js 选择一个列表
在我需要清理的页面上(使用node.js和cheerio),我有以下模式:Node.js 选择一个列表,node.js,jquery-selectors,cheerio,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
<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>
如果没有成功(每个
循环从未进入…)
有什么建议吗?h2标记没有ID,因此您的选择器找不到结果,没有可循环的内容 您可以通过循环锚定标记轻松地完成此操作
$("a").each(function(i, e) {
if (e.attr('title') && e.attr('href')) console.log("... stuff ...");
});
或者,您可以给
h2
一个id,或者从选择器中删除该id。循环的方法很多。元素ol
实际上不是span#2015
的下一个元素。ol
元素位于div
中,该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'));
});
可能我的问题不清楚,对不起。。。我刮的页面是公共页面,我无法控制它。。。我需要在
h2
元素之后获得ol
列表元素,该元素包含具有特定id
(“2015”)的span
。但是,您的第一句话是正确的:我使用h2>span[id=“2015”]
更改了我的代码,但是没有成功-(试试这个$('h2>span[id=“2015”]')).parent().next('div').find('ol>li>a')
这是正确的答案!如果您介意将您的评论重构为答案(包括元素标题/href提取),我会接受它……您忘了我要求了一个列表,所以会在find()之后添加each()
)
。此外,我将不使用:if(e.attr('title')而使用:if(!e.attr('class')),因为我必须忽略没有类的元素。对于其他元素,这是解决方案(我忘记了parent()
…-()。谢谢!好的,更新了ans。请注意,您可以使用a:not([class])
来过滤没有任何类的元素。
$('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'));
});