如何使用cheerio从两个相同的班级中获得第一堂课

问题描述

当前,我正在使用cheerio用node.Js制作网络刮板。我想将数据放入class="panel-items-list的第一行中。

html看起来像这样

<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">...</ul>
  </div>
</div>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">...</ul>
  </div>
</div>

我已经这样做了

const relateArticle = $('.panel-items-list').map((i,section)=>{
                    let articles = $(section).find('h5');
                    return articles.text();

                }).get();

,但它从两个class="panel-items-list"返回数据。我如何仅从一个班级获得数据?对不起,我的英语不好。预先感谢!

解决方法

要仅从.panel-item-list获取第一类,请使用.get(0),这意味着您仅选择使用.map找到的第一类索引

此外,在您当前的code jQuery中,您没有选择正确的class选择器。

在获取文本以清除文本中任何看不见的空间时,还使用.trim()方法。

实时工作演示:

const relateArticle = $('.panel-item-list').map((i,section) => {
  let articles = $(section).find('h5');
  return articles.text().trim();
}).get(0)

console.log(relateArticle) //Foo
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">
      <h5>
        Foo
      </h5>
    </ul>
  </div>
</div>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">
      <h5>
        Bar
      </h5>
    </ul>
  </div>
</div>

,

使用first():

$('.panel-items-list').first().find('h5').text()