Мне нужно найти значение, если атрибут id
всех элементов <div>
, у которых есть ребенок <span>
.Выберите элементы HTML по имени их первого дочернего элемента
Например, учитывая этот HTML
<div id="a1"> <span> xa1 </span> </div>
<div id="a2"> <p>...</p> <span> xa2 </span> </div>
<div id="a3"> <p> <span> xa3 </span> </p> </div>
<div id="a4"> <p>...</p> </div>
<div id="b1"> </div> <span> xb1 </span>
<div id="b2"> </div> <p> <span> xb1 </span> </p>
<div id="b3"> </div> <p>.</p> <span> xb3 </span>
мне нужно получить: a1
и больше ничего.
Поскольку у селекторов CSS нет чего-то вроде positive-lookahead Мне нужно несколько раз искать HTML-код, но я не знаю как.
Как изменить следующий источник, чтобы получить только a1
?
use 5.014;
use warnings;
use Mojo::DOM;
my $html = do {local $/; <DATA>};
my $dom = Mojo::DOM->new($html);
for my $div ($dom->find('div')->each) {
#say "DIV[[$div]]";
my @spans = $div->find('div > span')->each; #found a1 and a2 ;(
say $div->attr('id') if (@spans == 1);
}
__DATA__
<div id="a1"> <span> xa1 </span> </div>
<div id="a2"> <p>...</p> <span> xa2 </span> </div>
<div id="a3"> <p> <span> xa3 </span> </p> </div>
<div id="a4"> <p>...</p> </div>
<div id="b1"> </div> <span> xb1 </span>
<div id="b2"> </div> <p> <span> xb1 </span> </p>
<div id="b3"> </div> <p>.</p> <span> xb3 </span>
<p id="p1"> <span> xp1 </span> </p>
<p id="p2"> <p>...</p> <span> xp2 </span> </p>
<p id="p3"> <p> <span> xp3 </span> </p> </p>
<p id="p4"> <p>...</p> </p>
YES! Я несколько упускал из виду «первого ребенка» и «nth-child» .. Thanx.Подтвердите это, потому что это решение Mojo :: DOM, которое я уже знаю (несколько). – cajwine