Cheerio: Как получить все метки у бабушки и дедушки - PullRequest
0 голосов
/ 02 мая 2020

Я бы хотел получить все теги img с произвольным уровнем вложенных элементов в указанном родительском теге, но моя реализация не выводит el.

<div class='grand'>
    <div>
        <img src='1.png'>
    </div>
    <div>
        <div>
            <img src='2.png'>
        </div>
    </div>
    <img src='3.png'>
</div>

Моя реализация так far:

let images = $('div.grand').siblings().find('img')
images.each((i, el) => {
    console.log($(el).html()) //prints empty string
})

По сути, я хотел бы получить тот же результат, что и soup.findAll('img') из BeautifulSoup в python.

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Ваш код не выводит пустую строку - он не печатает что-либо в each, потому что ни один элемент не соответствует.

Чтобы найти элементы, соответствующие селектору которые являются потомками элементов, соответствующих другому селектору, поставьте между ними пробел. Здесь для img s, которые происходят от .grand, вы должны использовать .grand img:

$('.grand img').each((i, el) => {
    console.log(el.attribs.src)
});

Результат:

1.png
2.png
3.png
0 голосов
/ 02 мая 2020

Вы были близки! Чтобы выполнить то, что вам нужно:

$(".grand img").each(function() {
  const src = $(this).attr("src")
  console.log(src)
})

Для доступа к атрибуту src ссылочного объекта используется $(this)

.grand img означает доступ ко ВСЕМ дочерним элементам внутри элементов с помощью класс grand

...