При использовании Cheerio для очистки HTML не может получить второй элемент подряд - PullRequest
0 голосов
/ 29 апреля 2019

ребята, я использую cheerio, чтобы очистить HTML-документ, который показан ниже, мне нужно выяснить href из двух элементов в каждом элементе статьи.

<article>
  <div class="row">
       <div class="col-md-5 col-6">
          <a  class="btn" href="https://xxxxxx.png">abc1</a>
       </div>
       <div class="col-md-5 col-6">
          <a class="btn"  href="https://xxxxx">abc2</a>
       </div>
  </div>
</article>

<article>
   ....
</article>

....

ниже - мой скрипт, который использует .btn, чтобы найти каждый элемент, и использует nth-child, чтобы получить их по порядку, он может успешно получить href первого элемента, однако он не может получить значение второго элемента. есть идеи как решить проблему?

const $ = cheerio.load(html);
$("article").each((i, element) => {
    let element1 = $(element).find(".btn:nth-child(1)").attr("href");
    let element2 = $(element).find(".btn:nth-child(2)").attr("href");

    console.log(element1,element2);
 });

1 Ответ

2 голосов
/ 29 апреля 2019

Селектор nth-child(num) ищет элементы, которые являются num -ым дочерним элементом их непосредственного родителя. Вот почему .btn:nth-child(2) не возвращает никаких элементов, поскольку второй тег a также является первым дочерним элементом его непосредственного родителя (div с классом col-md-5 и col-6).

Вы можете получить доступ к обоим тегам a следующим образом:

const $ = cheerio.load(html);
$("article").each((i, element) => {
    let allBtns = $(element).find(".btn");
    let element1 = $(allBtns.get(0)).attr("href");
    let element2 = $(allBtns.get(1)).attr("href");

    console.log(element1,element2);
 });

В этом случае мы получаем все элементы с классом btn, а затем ищем 1-й и 2-й элементы в этом списке (индекс на основе нуля).

...