回答:
$($("li").get().reverse()).each(function() { /* ... */ });
.get()
jQueryでラップされた配列を通常のJS配列に変換するを逃しました。JS配列にはがあり.reverse()
ます。
Array.reverse()
両方とも、配列を変更し、逆の配列を返します。したがって、このソリューションは実際には$()。get()が新しい配列を返すことに依存しており、内部のjQueryまたはDOM配列への参照ではありません。おそらく、この例の範囲内で安全な賭けです。警告コーダー。
世界最小のjqueryプラグインの形で、これまでで最もクリーンな方法を紹介します。
jQuery.fn.reverse = [].reverse;
使用法:
$('jquery-selectors-go-here').reverse().each(function () {
//business as usual goes here
});
-ここの彼の投稿でのMichael Gearyへのすべての信用:http : //www.mail-archive.com/discuss@jquery.com/msg04261.html
this
オブジェクトは数値プロパティと長さプロパティを持っているので、javascriptはそれにインデックスを付け、配列関数をjQueryインスタンスに適用できますか?
<li>Item 5</li>
0のインデックス持っている
Array.prototype.reverse
オーバーにしますjQuery.prototype.reverse
。JavaScriptの配列メソッドの多くは、配列のように見えるオブジェクトでも問題なく機能します。つまり、オブジェクトに.length
数値のインデックスプロパティがある場合です。reverse
配列の内部表現に依存しません。それは、通常使用してアレイにアクセスし.length
、[0]
、[1]
ちょうどあなたがあなた自身を書きたい配列のコードのようになど。
reverse
メソッドを取得するためだけに新しい配列をインスタンス化するのは無駄ではありませんか?Array.prototype.reverse
たとえば、関数への参照をコピーするだけの方が高速ではないでしょうjQuery.fn.reverse = Array.prototype.reverse;
か?短くて「賢い」わけではありませんが、より効率的ですか?確かに、これはおそらく今日の超高速ブラウザでは気づかないでしょうが、それでも...
できるよ
jQuery.fn.reverse = function() {
return this.pushStack(this.get().reverse(), arguments);
};
に続く
$(selector).reverse().each(...)
これにはさまざまなオプションがあります。
最初:jQueryなし:
var lis = document.querySelectorAll('ul > li');
var contents = [].map.call(lis, function (li) {
return li.innerHTML;
}).reverse().forEach(function (content, i) {
lis[i].innerHTML = content;
});
...そしてjQueryで:
あなたはこれを使うことができます:
$($("ul > li").get().reverse()).each(function (i) {
$(this).text( 'Item ' + (++i));
});
デモはこちら
もう1つの方法は、jQueryを逆に使用することです。
$.fn.reverse = [].reverse;
$("ul > li").reverse().each(function (i) {
$(this).text( 'Item ' + (++i));
});
このデモはこちら。
もう1つの方法は、length
(そのセレクターに一致する要素の数)を使用しindex
、各反復のを使用してそこから下に行くことです。次に、これを使用できます:
var $li = $("ul > li");
$li.each(function (i) {
$(this).text( 'Item ' + ($li.length - i));
});
このデモはこちら
もう一つ、上記1に関連する種類:
var $li = $("ul > li");
$li.text(function (i) {
return 'Item ' + ($li.length - i);
});
デモはこちら
私はリバースプラグインを作成することを好みます
jQuery.fn.reverse = function(fn) {
var i = this.length;
while(i--) {
fn.call(this[i], i, this[i])
}
};
使用例:
$('#product-panel > div').reverse(function(i, e) {
alert(i);
alert(e);
});
$ .eachを逆にする必要があるため、Vinayのアイデアを使用しました。
//jQuery.each(collection, callback) =>
$.each($(collection).get().reverse(), callback func() {});
うまくいきました、ありがとう
$.each(collection.reverse(), ...)
。
私が見つかりました。Array.prototype.reverse
私が代わりとして使用する新しいjQueryの機能を作ったので、オブジェクトで失敗しました:jQuery.eachBack()
。通常のように反復し、jQuery.each()
各キーを配列に格納します。次に、その配列を反転し、反転したキーの順序で元の配列/オブジェクトにコールバックを実行します。
jQuery.eachBack=function (obj, callback) {
var revKeys=[]; $.each(obj,function(rind,rval){revKeys.push(rind);});
revKeys.reverse();
$.each(revKeys,function (kind,i){
if(callback.call(obj[i], i, obj[i]) === false) { return false;}
});
return obj;
}
jQuery.fn.eachBack=function (callback,args) {
return jQuery.eachBack(this, callback, args);
}
<li>Item 5</li>
0のインデックス持っている