1

根据这个答案

HTML 4.01 规定 <a> 元素只能包含内联元素。<div> 是块元素,因此它可能不会出现在 <a> 中。

但...

HTML5 允许 <a> 元素包含块。

好吧,我只是尝试<div class="m">在一个<a>块中选择一个,使用:

Elements elems = a.select("m");

并且 elmes 返回空,尽管 div 在那里。

所以我在想:要么我没有使用正确的语法在 a 中选择 div,要么...... Jsoup 不支持这个仅限 HTML5 的功能?

在 中选择 a 的正确 Jsoup 语法是div什么a

更新:我刚试过

Elements elems = a.getElementsByClass("m");

Jsoup 对此没有任何问题(即它在 a 中返回正确数量的此类 div)。

所以我现在的问题是:为什么?

为什么a.getElementsByClass("m")有效而a.select("m")无效?

更新:根据@Delan Azabani 的建议,我刚刚尝试过:

Elements elems = a.select(".m");

它奏效了。所以基本上是a.select()作品,但我错过.了类名前面的。

4

2 回答 2

3

select函数采用选择器。如果您'm'作为参数传递,它将尝试查找作为该m元素的子元素的a元素。您需要'.m'作为参数传递,它将在元素下找到具有m类的a元素。

于 2011-04-29T03:56:38.373 回答
1

当前版本的 jsoup (1.5.2) 确实支持div嵌套在标签内的a标签。

在这种情况下,我建议打印出解析树,以确保 jsoup 已经像您期望的那样解析了 HTML,或者如果它不知道要使用什么正确的选择器。

例如:

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>
于 2011-04-29T04:20:47.297 回答