根据this answer:
HTML 4.01指定< a>分子 可能只包含内联元素。一个 < DIV>是一个块元素,所以它可能 不会出现在< a>。
中
但是...
HTML5允许< a>要包含的元素 块。
好吧,我刚刚尝试在<div class="m">
块中选择<a>
,使用:
Elements elems = a.select("m");
并且elmes返回空,尽管div在那里。
所以我在想:要么我没有使用正确的语法来选择a中的div还是... Jsoup不支持这个仅HTML5的功能?
在div
中选择a
的Jsoup语法是什么?
更新:我刚试过
Elements elems = a.getElementsByClass("m");
Jsoup对此没有任何问题(即它在a中返回正确数量的此类div)。
所以现在我的问题是:为什么?
为什么a.getElementsByClass("m")
有效,而a.select("m")
没有?
更新:我刚试过,根据@Delan Azabani的建议:
Elements elems = a.select(".m");
它有效。所以基本上a.select()
可以正常工作,但我错过了班级名称前面的.
。
答案 0 :(得分:3)
select
函数采用选择器。如果您将'm'
作为参数传递,它将尝试查找m
元素的子元素a
元素。您需要传递'.m'
作为参数,该参数将在m
元素下找到a
类的元素。
答案 1 :(得分:1)
当前版本的jsoup(1.5.2)支持嵌套在div
标记内的a
个标记。
在这种情况下,我建议打印出解析树,以确保jsoup像您期望的那样解析HTML,或者它是否不知道要使用的正确选择器。
E.g:
Document doc = Jsoup.parse("<a href='./'><div class=m>Check</div></a>");
System.out.println("Parse tree:\n" + doc);
Elements divs = doc.select("a .m");
System.out.println("\nDiv in A:\n" + divs);
给出:
Parse tree:
<html>
<head></head>
<body>
<a href="./">
<div class="m">
Check
</div></a>
</body>
</html>
Div in A:
<div class="m">
Check
</div>