jQueryセレクターを簡素化する
質問
セレクター<!> quot; td > a.leftmenuitem:last, div > a.leftmenuitem:last
<!> quot;がありますが、少し簡略化したいと思います。 <!> quot; * > a.leftmenuitem:last
<!> quot;、<!> quot; td, div > a.leftmenuitem:last
<!> quot ;、および<!> quot; (td, div) > a.leftmenuitem:last
<!> quot;を試しましたが、どれも最初のセレクターのように動作します。この種のことは、セレクター構文でそれぞれに個別のセレクターを作成しないと不可能なのですか?
解決
単純化することはできません:
td > a.leftmenuitem:last, div > a.leftmenuitem:last
共通点がないため、1つの式ですべての関連するtdおよびdiv要素を選択できます。たとえば、両方にクラスのブラーがある場合は、次のことができます。
.blah > a.leftmenuitem:last
ただし、回避できる場合はこの種類の式を使用しないでください。クラスセレクターは低速です(IDおよびタグセレクターと比較して)。
ジャストに何か問題がありますか
a.leftmenuitem:last
?
ところで、:last
が正しい選択だと確信していますか?多くの人が誤ってそれを使用し、:last-child
と間違えています。 <=>は、ページで最後に一致した要素である1つの要素のみに一致します。
他のヒント
大きいもの、時には速いもの。 td の代わりに * を使用すると、クエリが非常に遅くなります。
あなたがそれを単純化できるとは思わない。代わりに、ユニークなクラスに興味のあるリンクを提供することを選択します。これにより、単純に"a.<my-unique-class>:last"
を実行できます。このようにして、jqueryは、親が<a>
要素であることを心配することなく、一致するすべての<td>
タグを単純にスキャンできます。
セレクターは非常にシンプルです。単純化する場合は、次のようなことができます。
$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();
ただし、これにより実行時間が短縮されるとは思いません。
たぶん混乱しているかもしれませんが、もしも
* > a.leftmenuitem:last
あなたのために働くでしょう、それでは一緒に行きましょう
a.leftmenuitem:last
代わりに?
使用しているセレクターは
ですParent > Child
は、Child
で指定された要素のParent
で指定されたすべての子要素に一致します。 <a>
要素と<div>
要素の子ではないページの他の場所で<td>
要素を使用している場合を除き、なぜ
$('a.leftmenuitem:last')
何かが足りませんか?