通过在其上调用 appendTo 更改 Jsoup 元素
Jsoup Element changed by calling appendTo on it
我有一个 Jsoup
Element
个对象的列表
我多次遍历它们并从列表中创建几个新的 Element
对象。
像这样:
public static Element mergeElements(List<Element> elements, int startFrom) {
Element mergedElement = new Element("div");
for (int i = startFrom; i < elements.size(); i++) {
elements.get(i).appendTo(mergedElement);
}
return mergedElement
}
上面的方法可以多次调用,使用相同的 List
个 element
个对象。
我观察到返回的 mergedElement
对象在我调用 mergeElements()
后被修改了。
一个简化的例子。
Element firstMergedElement = mergeElements(elements, 0);
System.out.println(firstMergedElement);
Element secondMergedElement = mergeElements(elements, 1);
// The object has been changed.
System.out.println(firstMergedElement);
这可能吗?
为什么 appendTo
会改变 this
?
方法appendTo
将元素附加到新的父级。一个元素不能同时有两个父元素,因此实际上元素将从 firstMergedElement
移动到 secondMergedElement
。
如果你想将它们也保留在 firstMergedElement
中,你可以克隆它们中的每一个:
elements.get(i).clone().appendTo(mergedElement);
编辑:
显示您的代码正在做什么的附加说明:
我有一个 Jsoup
Element
个对象的列表
我多次遍历它们并从列表中创建几个新的 Element
对象。
像这样:
public static Element mergeElements(List<Element> elements, int startFrom) {
Element mergedElement = new Element("div");
for (int i = startFrom; i < elements.size(); i++) {
elements.get(i).appendTo(mergedElement);
}
return mergedElement
}
上面的方法可以多次调用,使用相同的 List
个 element
个对象。
我观察到返回的 mergedElement
对象在我调用 mergeElements()
后被修改了。
一个简化的例子。
Element firstMergedElement = mergeElements(elements, 0);
System.out.println(firstMergedElement);
Element secondMergedElement = mergeElements(elements, 1);
// The object has been changed.
System.out.println(firstMergedElement);
这可能吗?
为什么 appendTo
会改变 this
?
方法appendTo
将元素附加到新的父级。一个元素不能同时有两个父元素,因此实际上元素将从 firstMergedElement
移动到 secondMergedElement
。
如果你想将它们也保留在 firstMergedElement
中,你可以克隆它们中的每一个:
elements.get(i).clone().appendTo(mergedElement);
编辑:
显示您的代码正在做什么的附加说明: