通过在其上调用 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
}

上面的方法可以多次调用,使用相同的 Listelement 个对象。

我观察到返回的 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);

编辑:
显示您的代码正在做什么的附加说明: