有像
这样的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,换句话说,我想要连续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相同的功能。
答案 0 :(得分:1)
您可以使用:first
选择器获取第一个.row
元素,然后使用nextUntil()
来捕获其余元素。试试这个:
var $rows = $('.row:first').nextUntil(':not(.row)');
如果您还希望在匹配集中包含第一行,则可以使用addBack()
,如下所示:
var $rows = $('.row:first').nextUntil(':not(.row)').addBack();
答案 1 :(得分:0)
jQuery的:
$("h3").nextUntil("#pricing");
在h3
之后捕获所有元素,直到达到ID为pricing
答案 2 :(得分:0)
连续的div,嗯?这听起来像你想要的东西:
div.row:has(+ div.row),div.row + div.row
我不知道PHPQuery是否支持,如果不是,你应该考虑切换。
另一个想法是h3 + .row
,然后继续迭代+ .row