1

この回答によると

HTML 4.01 では、 <a> 要素にはインライン要素のみを含めることができると規定されています。<div> はブロック要素であるため、<a> 内に表示されない場合があります。

しかし...

HTML5 では、 <a> 要素にブロックを含めることができます。

さて、次を使用して、ブロック<div class="m">内でを選択しようとしました。<a>

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

divがそこにあるにもかかわらず、elmesは空を返します。

だから私は考えています: a 内の div を選択するための正しい構文を使用していないか、または... Jsoup はこの HTML5 のみの機能をサポートしていませんか?

div内でを選択するための正しいJsoup構文は何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'を見つけようとします。要素の下にクラスを持つ要素を見つける引数として渡す必要があります。ma'.m'ma

于 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 に答える