【发布时间】:2021-07-02 08:38:30
【问题描述】:
这个问题有另一个版本,我将用它来作为我Jsoup: get all elements before a certain element / remove all elements after a certain element的基础
我想获取 .friend-pets 之前的所有 .pet。我尝试使用原始问题中提出的解决方案,但在这个用例中遇到了这个结果。
输入:
<div class="pets">
<div>
<div class="pet">1</div>
<div class="pet">2</div>
</div>
<div class="pet">3</div>
<div class="friends-pets">Your friends have these pets:</div>
<div class="pet">4</div>
<div>
<div class="pet">5</div>
<div class="pet">6</div>
</div>
<div>
预期:
<div class="pet">1</div>
<div class="pet">2</div>
<div class="pet">3</div>
实际:
<div class="pet">1</div>
<div class="pet">2</div>
<div class="pet">3</div>
<div class="pet">5</div>
<div class="pet">6</div>
这发生在我跑步时:
Element petsWrapper = document.selectFirst(".pets");
Elements pets = petsWrapper.select(".pet");
// select middle element
Element middleElement = petsWrapper.selectFirst(".friends-pets");
// remove from "pets" every element that comes after the middle element
pets.removeAll(middleElement.nextElementSiblings());
System.out.println(pets);
因为 nextSiblings() 方法只获取属于同一父级的元素。 当我使用第二个答案中建议的css选择器时,如下所示:
.pet:not(.friends-pets ~ .pet)
我收到此错误:
Did not find balanced marker at '.friends-pets ~ .pet'
所以我无法真正测试它是否真的有效。
谢谢。
【问题讨论】:
标签: java html jsoup html-parsing