获取具有特定班级

时间:2016-06-10 08:17:52

标签: php jquery html phpquery

有像

这样的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相同的功能。

3 个答案:

答案 0 :(得分:1)

您可以使用:first选择器获取第一个.row元素,然后使用nextUntil()来捕获其余元素。试试这个:

var $rows = $('.row:first').nextUntil(':not(.row)');

如果您还希望在匹配集中包含第一行,则可以使用addBack(),如下所示:

var $rows = $('.row:first').nextUntil(':not(.row)').addBack();

Working example

答案 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