鉴于以下代码:
HTML:
<div>a</div>
<div>b</div>
<div>c</div>
JS:
Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.get(1).remove();
// remove doesn't affect elements. why?
elements.size(); // equal 3
// but this works
doc.outerHtml() // <div>a</div><div>c</div>
我是否必须使用此代码来删除元素?这似乎太冗长了。
Document doc = Jsoup.parse(baseHtml);
Elements elements = doc.select("div");
elements.get(1).remove();
elements = doc.select("div");
答案 0 :(得分:5)
这可以帮到你:
public class TestJsoup {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://www.google.ro").get();
Elements select = doc.select("div");
System.out.println(select.size());
select.remove(1);
System.out.println(select.size());
} catch (IOException ex) {
Logger.getLogger(TestJsoup.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 1 :(得分:1)
你问为什么这不起作用
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());
}
}
我希望这有助于消除困惑。