Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 选择一个列表_Node.js_Jquery Selectors_Cheerio - Fatal编程技术网

Node.js 选择一个列表

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

在我需要清理的页面上(使用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>
如果没有成功(
每个
循环从未进入…)


有什么建议吗?

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'));
  });