你问为什么这不起作用
elements.get(1).remove();
// remove doesn't affect elements. why?
答案可以在实现中找到。您在元素上调用的方法是在Node
类中实现的方法。
public void remove() {
Validate.notNull(this.parentNode);
this.parentNode.removeChild(this);
}
如您所见,调用remove()
从父级中删除了此元素(如果您打印文档,您将看到该元素b
已被删除。但这并不意味着该元素已从该类所Elements
包含的元素列表中删除。
public class Elements implements List<Element>, Cloneable {
private List<Element> contents;
为了做到这一点,您必须按照@Silviu Burcea 向您展示的方式进行操作,通过调用remove(int index)
您正在调用以下方法的方法,该方法可以在Elements
类中实现
public Element remove(int index) {
return ((Element) this.contents.remove(index));
}
尽管牢记在心,但如果您这样做,您唯一要做的就是从Elements
该类包含的列表中删除第 i 个元素。
检查这些示例
示例 1:元素的大小减小,但文档保持不变
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args) throws Exception {
String baseHtml = "<div>a</div>" +
"<div>b</div>" +
"<div>c</div>";
Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.remove(1);
System.out.println(doc.outerHtml());
System.out.println("-----------------------------------");
System.out.println(elements.size());
System.out.println("-----------------------------------");
System.out.println(doc.outerHtml());
}
}
示例 2:元素保持不变,但文档发生了变化
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args) throws Exception {
String baseHtml = "<div>a</div>" +
"<div>b</div>" +
"<div>c</div>";
Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.get(1).remove();
System.out.println(doc.outerHtml());
System.out.println("-----------------------------------");
System.out.println(elements.size());
System.out.println("-----------------------------------");
System.out.println(doc.outerHtml());
}
}
我希望这有助于消除混乱。