Вы спросили, почему это не работает
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
класс.
Проверить эти примеры
Пример 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());
}
}
Я надеюсь, что это поможет очистить confu Sion.
Помог ли один из нижеприведенных ответов? Если да, то пожалуйста, примите одно, так что эту тему можно считать закрытой. Если нет, сообщите об этом сообществу, чтобы мы могли оказать дополнительную помощь. – alkis