1

我有这个跨度:<span style="font-weight:bold;">bold. </span>以及对它(元素)的引用,称为跨度。

我想将我的 span 元素中的所有内容包装在一些新标签中,例如<p>标签:<span style="font-weight:bold;"><p>bold. </p></span>

我知道我可以调用span.wrap("<p></p>"),但这包含跨度而不是跨度内容。当我尝试span.append("<p>")在内容的开头创建新标签时,appendElement 也会发生同样的情况。

包装跨度/元素内容而不是整个元素的最佳方法是什么?

更新: Elements 也有 wrap 但调用 span.getAllElements() 然后 wrap 提供与 span.wrap() 相同的结果,并且 span.children() 在此示例中为 0。

更新 2:作为一种解决方法,我能够使用 span.html() 获取内容,将其存储为临时字符串,在该内容周围添加所需的标签,然后通过 span.html(newContent ); 如果没有更好的方法,我只会回答我自己的问题。

4

1 回答 1

3

为了包装文本节点使用

span.childNode(0).wrap("<p>");

编辑:具有各种用例的示例:

String html = "<span style=\"font-weight:bold;\">bold.</span><span></span><span><a>text</a></span>";
Document parsedDoc = Jsoup.parse(html);
Elements selects = parsedDoc.select("span");

for (Element span : selects) {
    List<Node> childNodes = span.childNodes();
    if (childNodes.size() > 0 && span.childNode(0).childNodes().size() == 0) {
        span.childNode(0).wrap("<p>");
    }
}
于 2013-01-05T00:50:05.167 回答