6

要素のリストがあります。たとえば、いくつかの画像を考えてみましょう。

<img src="" alt="">
<img src="" alt="">
<img src="" alt="">

それらを選択し、結果を変数に格納します。

var elements = $('img');

最後の画像を最初の位置に移動します。これは次のように正常に機能します。

elements.first().before(elements.last());

その後、オブジェクトはelements当然、以前の順序で値を保持します。シフト後に再度クエリを実行することで、これを更新できます。

elements = $('img');

しかし、すでにすべての要素が揃っている場合、別のクエリを実行するのは非効率的です。また、配列ではないため、これは機能しません。

elements.unshift(elements.pop());

このような場合にオブジェクトリストを更新する最良の方法は何ですか?

4

3 に答える 3

3

ごまかす!

[].unshift.call(elements, [].pop.call(elements))

デモ


警告:これがクエリを再実行するよりも速いとは思えません。

于 2013-03-07T18:28:32.580 に答える
1

ここで起こっていることが2つあります。

DOMには一連の要素があり、それらの要素への参照のDOMフラグメントを保持する変数があります。

jQueryfirst()last()関数はDOM内の要素を移動していますが、変数については何も知りません。

コードの単純さの観点から、提案されたコードは最も読みやすく、頻繁に呼び出さない限り問題ないはずです。

elements = $('img');

それ以外の場合は、変数を配列に変換します。

var elementsarray = [];
elements.each(function(i) { elementsarray[] = this; });
于 2013-03-07T18:51:59.350 に答える
0
<div class="container">
 <img src="" alt="">
 <img src="" alt="">
 <img src="" alt="">
</div>

$('.container img:last-child').prependTo('.container'); //would work

$('img:last', elements).prependTo(elements); 
// i think this will also work if you need to cache it
于 2013-03-07T18:32:24.097 に答える