使用filter
:
セレクタと一致または機能のテストに合格するものにマッチした要素の集合を減らします。
だから、これはそれを行う必要があります。
$listObjects.filter(':nth-child(3n)')
をあなたは、あなたがあなたの元find
で:nth-child
を含めることができない何かのために$listObjects
を必要としない場合:
$data.find('li[data-type=' + $filterType + ']:nth-child(3n)');
何が起こっているのかを明らかにする。このHTMLを考える:私たちは$('li[data-id]')
を言うなら
<ul>
<li data-id="a">One</li>
<li>Two</li>
<li data-id="a">Three</li>
<li data-id="a">Four</li>
<li data-id="a">Five</li>
<li data-id="a">Six</li>
<li data-id="a">Seven</li>
</ul>
我々は明白な理由のために一つ、三、四、ファイブ、六、および七を取得します。
我々は$('li[data-id]').filter(':nth-child(3n)')
を言うなら、あなたはおそらく四と七を取得するために期待しているとき、私たちは三と六を取得します。ここでは何が起きるのですか? :nth-child
セレクタが[data-id]
と一致するものではなく、<ul>
のすべての子に適用されています。詳細マニュアルから:
提供されたセレクタは各要素に対してテストされています。セレクタに一致するすべての要素が結果に含まれます。
だから、この動作は、それが少し混乱で、スペックは物事がどのように相互作用するかについて、より明確にすることができても、仕様と一致します。
我々は$('li[data-id]:nth-child(3n)')
を言うならば、我々は(期待?)を取得四と七、すなわち$('li[data-id]')
のすべての第三の要素。
そして最後に、我々はこの言うことができる:nth-child
はCSSセレクタであり、したがって、したがって(i + 1)
テスト機能では、1ベースのことを覚えておいてください
$.grep($('li[data-id]'), function(e, i) { return (i + 1) % 3 == 0 }));
を。それで私たちはすべての3番目の要素を再び与えるでしょう4つと7つの。 $.grep
はプレーンなDOM要素の配列を提供するので、jQueryのifiedバージョンの場合は$()
にその配列をラップしたいと思うでしょう。
デモ:http://jsfiddle.net/fw4xr/
概要:filter
はあなたが望むものではないかもしれませんが、元のセレクタに:nth-child(3n)
を追加することは、おそらくです。または、$.grep
を使用して、$listObjects
配列のうち興味がある部分をつかむことができます。また、filter
の動作はちょっと混乱します。
'$ listObjects'はhtml文字列か配列ですか? –
@AmarPalsapure私の推測では、jQueryオブジェクトです。 – Phil
これは、jQueryオブジェクトです。申し訳ありませんが、それをよりよく説明してください。 –