jQueryで最初の「n」項目を選択する


217

Jqueryを使用して、ページから最初の「n」個のアイテムのみを選択する必要があります。たとえば、通常のアイテムをすべて選択するのではなく、最初の20個のリンクを選択します

$("a")

簡単に聞こえますが、jQueryマニュアルにはこのようなものの証拠はありません。

回答:


378

あなたはおそらくスライスを読みたいでしょう。コードは次のようになります。

$("a").slice(0,20)

65
:lt(20)アプローチはよりすっきりしているように見えますが、最初に大きな結果セットがある場合は、sliceを使用する方がはるかに効率的です。残念ながら、「:lt」やその他の位置セレクターを評価する場合、jQueryは最初の要素を取得しているだけの場合でも、セット全体をループします。詳細については、こちらのブログ(spadgos.com/?p=51
nickf、2009

1
ありがとう、私の要求の副次的な要件はパフォーマンスに関するものだったので、これは私にとって正しい答えです。:ltセレクターを指摘してくれた他の人たちにも感謝します。
Omiod 2009

3
@nickfによる有益なコメントが、ブログリンクとグラフリンクが機能していないようです
Fractalf

1
現在、編集できません。基本的に、sliceの方がはるかに高速でした。
nickf 2013年

92

lt疑似セレクターを使用します。

$("a:lt(n)")

これは、n番目の要素の前の要素と一致します(n番目の要素は除外されます)。番号は0から始まります。


13
jQuery Docsによると、最新のブラウザでは.sliceの方が高速です。
ブレーズ'19

1
私はjQueryスタイルの使用が好きです。チェーンよりもエレガントです。
Fedir RYKHTIK

22

私はこのメモをlt()ドキュメントの最後に見つけました:

追記事項::
lt()はjQuery拡張であり、CSS仕様の一部ではないため、:lt()を使用するクエリは、ネイティブDOM querySelectorAll()メソッドによって提供されるパフォーマンスの向上を利用できません。最新のブラウザーでより良いパフォーマンスを得るには、代わりに$( "your-pure-css-selector")。slice(0、index)を使用してください。

$("selector").slice(from, to)より良いパフォーマンスのために使用してください。



7

.slice()が常に優れているとは限りません。私の場合、Chrome 36のjQuery 1.7では、.slice(0、20)がエラーで失敗しました:

RangeError:呼び出しスタックの最大サイズを超えました

この場合、:lt(20)はエラーなしで機能することがわかりました。おそらく何万もの一致する要素がありました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.