包裹跨度的内容

时间:2013-01-04 23:15:19

标签: java jsoup

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

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

我知道我可以调用span.wrap("<p></p>"),但这包括跨度而不是跨度内容。当我尝试span.append("<p>")时,新标签只是在内容的开头创建,而appendElement也是如此。

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

更新:元素也有包装,但调用span.getAllElements()然后换行,提供与span.wrap()相同的结果,并且span.children()在本例中为0。

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

1 个答案:

答案 0 :(得分: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>");
    }
}