Есть HTML как
<h3>Specifications</h3>
<div class="row"> some text </div>
<div class="row"> some text 2 </div>
<div class="row"> some text 3 </div>
<div class="detail-anchor" id="pricing"></div>
<div class="row"> some text 4</div>
Я использую PHP + phpQuery для очистки сайта
Я хочу получить только первые 3 деления, другими словами, я хочу получить все подряд div.row
,
Это код, который я использую
foreach (pq('h3:contains("Specifications")', $profile_page)->nextAll('div.row') as $div) {
}
Но то, что он делает, это также царапает some text 4
Div тоже.
я пытался nextAll('div.row')
также, но это дает мне тот же результат.
Так что мой вопрос, как я могу получить все подряд div.row
после <h3>Specifications</h3>
, если между ними появляется какой-либо другой тег, просто ОСТАНОВИТЕ.
PS:
Ответы в чистом jQuery также будут приниматься, поскольку библиотека phpQuery использует ту же функцию, что и jQuyery.
Вы можете использовать :first
селектор, чтобы получить первый .row
элемент, то nextUntil()
захватить остальное. Попробуй это:
var $rows = $('.row:first').nextUntil(':not(.row)');
Если вы хотите также включить первую строку в соответствующий набор, вы можете использовать addBack()
, как это:
var $rows = $('.row:first').nextUntil(':not(.row)').addBack();
JQuery:
$("h3").nextUntil("#pricing");
Захватывает все элементы после h3
пока он не достигнет этого с идентификатором pricing
Последовательные дивы, а? Похоже, вы хотите что-то вроде:
div.row:has(+ div.row),div.row + div.row
Я не знаю, поддерживает ли PHPQuery это, если нет, вы должны рассмотреть вопрос о переключении.
Другая идея состоит в том, чтобы сделать h3 + .row
а затем просто продолжать итерацию + .row