3

この画像をご覧ください:

ここに画像の説明を入力してください

誰かが違いを説明できますか?

編集

何が私を困惑させるかを示しましょう。次のことに注意してください。

  1. $row.is('tr.items:last') === false
  2. $row[0].id === $('tr.items:last')[0].id

2つのステートメントは互いに矛盾しているようです。最初のものは、それ$rowが最後ではないことを示していtr.itemsます。しかし、2番目のものは、それ$rowが正確に$('tr.items:last')、つまりの最後であることを示していtr.itemsます。

:last-of-typeセレクターではそのようなことは起こりません。

ここで何が起こっているのですか?

4

3 に答える 3

5

last-of-typeCSS疑似クラスであり、指定されたタグ名の最後の兄弟を表します。ブラウザがサポートしていて、jQueryのみのセレクターを使用していない場合、jQueryセレクターとして機能する可能性があります。それ以外の場合は、サポートされていないSizzleを使用します。このjQueryチケットを参照してください。querySelectorAll()

一方、最後に一致した要素を選択:lastするjQueryセレクターです。

于 2012-09-01T14:40:27.930 に答える
1

jQueryは、の.isようなフィルターを設定する場合に、異なるフィルターメカニズムを実行し:lastます。重要なのは、通常は.filter現在のセットで使用し、フィルタリング後に要素が残っているかどうかをチェックすることです。

これは、次のような場合に機能します。

$("<a></a><b></b>").is("b");  // true, there is a <b> after filtering

しかし、:lastこのようなフィルターはセットに相対的であるため、これは失敗します。2つの要素を持つドキュメントを考えてみましょう。

$("a:first").is("a:last");  // would be true if the same method was used,
                            // because in the set with the first <a> element,
                            // the last <a> element is that element. So filtering
                            // with `a:last` yields something, and `.is` gets you
                            // true.

これはあなたが期待するものとは対照的です。そのため、jQueryは代わりに現在のコンテキストで検索し、そのセットで明らかa:lastかどうかをチェックします。a:first

あなたの場合の問題は、$(ev.target)(in handleKeyDown)がコンテキストをドキュメントではなくその入力要素にすることです(これは通常の場合です)。そのコンテキストではNotr.itemsが見つかり、を取得しますfalse。これは間違いなくjQueryのバグです。

とにかく、あなたができることは、代わりにセットに対してチェックすることです。とにかく、対応する関数を使用する方が高速です。

$row.is( $("tr.items").last() );  // true
于 2012-09-02T12:46:09.163 に答える
0

:last-of-type指定されたタグ名を持つ最後の兄弟を選択します。:last-of-typeこれは「公式の」jQueryセレクターではなく、一部のブラウザー、特にサポートしているブラウザーdocument.querySelectorAll()(IEを除くすべての新しいバージョン)でのみ機能することに注意してください。

于 2012-09-01T14:42:03.370 に答える