我有这个范围:<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);如果没有更好的方法我会回答我自己的问题。
答案 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>");
}
}