3

特定の HTML ページのすべてのリンクを識別する関数を作成したいと考えています。//body//a[x]私の考えは、ページの最初、2番目、3番目のリンクを通過するためにxをインクリメントするなどのパスを使用して、XPathを使用することでした。

Chrome でこれを試しながら、ページhttp://exoplanet.eu/をロードし、Chrome Developer Tools JS コンソールで$x("//body//a[1]"). ページの最初のリンクを期待していますが、これは複数のアンカー要素のリストを返します。を呼び出す$x("//body//a[2]")と、2 つのアンカー要素が返されます。呼び出し$x("//body//a[3]")ても何も返されません。

[x]毎回インクリメントすると、ページ上で一意のリンクが 1 つずつ得られることを期待していましたが、それらはグループ化されているようです。各アンカー タグを 1 つずつ選択するように、このパスを書き換えるにはどうすればよいですか?

4

2 に答える 2

8

ページの最初のリンクを選択する場合は、そうする//body//a[1]必要があります。(//body//a)[1]前者の式は、親要素の最初の子である任意の要素を選択します。

しかし、とにかく行うのは非常に奇妙なことのようです。リンクを 1 つずつ必要とするのはなぜですか。を使用してノードリストまたはノードセットとしてそれらをすべて選択し//body//a、セットを反復処理します。

于 2012-06-14T13:27:06.367 に答える
1

path//body/descendant::a[1]などを使用すると、要素のすべての子孫要素を//body/descendant::a[2]選択できます。または、あなたの試みでは、例えば、中括弧が必要です。abody(//body//a)[1](//body//a)[2]

ただし、Javascript を使用するブラウザ内document.linksではオブジェクト モデルにコレクションがあるため、リンクにアクセスするために XPath は必要ありません。

于 2012-06-14T11:04:17.293 に答える