xpathをjqueryで選択可能なCSS3形式に変換するには、javascriptまたはjqueryライブラリが必要です
-
22-07-2019 - |
質問
xpathを次のように変換するにはどうすればよいですか
/html/body/div[3]/ul/li[1]/a[5]
html > body > div[3] > ul > li[1] > a[5]
インデックスは CSS3 セレクターではサポートされていないと思います...それでは、これにどう対処すればよいでしょうか?
解決
Sizzle / jQueryがCSS3セレクターを適用できない場合は、を使用することをお勧めしますjPathの元のリリースの一部であったXPathプラグイン(実際に使用した人が少ないため削除されました)。
ブラウザでのXPathの実装は、CSSエンジンよりも高速になる傾向があります。また、JS解析& XPath式をCSS3に変換し、ブラウザが実装できるもの(通常はJS支援のCSS2.1セレクタ)にjQueryを追加すると、XPathを直接実行するよりも非常に遅くなりますブラウザ。
それだけでなく、XPathでできること、CSSでできないこともあります。例:
// h3 [class =" blog-title"] /../../ div [class =" blog-entry"] // input [fn:floor(value)& gt; 3]
XPathの実行は過度に複雑ではありませんが、CSSだけでは不可能です-DOMに戻り、式の一部として関数を実行することは、CSS3でも(私の知る限りでは)できません。
他のヒント
Selenium 1′のCSSロケーターエンジンはCSSQueryからSizzle、jQueryのCSSセレクターライブラリに移動しました。 変換できます
div[3]/ul/li[1]/a[5]
to
css=div:nth(3)>ul>li:nth(1)>a:nth(5)
and
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3]
に変換できます
css=h3.blog-title:parent(div.blog-entry) input[value=3]
ただし // input [@ value> 3]
は不可能またはトリッキーではありません
詳細については、 https://github.com/jquery/sizzle/wiki/Sizzle-をご覧ください。ホーム
IE での xpath の実装は非常に遅いです。IE6 ではさらに恐ろしいほど遅いため、ほとんどの場合、正規表現などに基づいた CSS セレクターを使用する傾向があります。sizzle や最新のものは qwery などです。CSS で使用するインデックス選択の場合はセレクター :nth-child(n)
a[5] = :nth-child(5)
0 で始まるか 1 で始まるか思い出せないので、4 である可能性もあります。
また、選択している親内に異なるタイプの子がある場合は、次のように使用できます。 :nth-of-type()
これは、指定されたタイプのみを選択します。あなたの場合:
a:nth-of-type(5)