我使用JQuery在页面上选择一些元素,然后在DOM中移动它们。我遇到的问题是,我需要以JQuery自然希望选择它们的相反顺序选择所有元素。例如:
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
我想选择所有的li项目,并使用.each()命令,但我想从项目5开始,然后是项目4等。这可能吗?
我使用JQuery在页面上选择一些元素,然后在DOM中移动它们。我遇到的问题是,我需要以JQuery自然希望选择它们的相反顺序选择所有元素。例如:
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
我想选择所有的li项目,并使用.each()命令,但我想从项目5开始,然后是项目4等。这可能吗?
当前回答
如果你不想保存方法到jQuery。Fn你可以用
[].reverse.call($('li'));
其他回答
虽然不能使用jQuery的每个函数向后迭代,但仍然可以利用jQuery语法。
试试下面的方法:
//get an array of the matching DOM elements
var liItems = $("ul#myUL li").get();
//iterate through this array in reverse order
for(var i = liItems.length - 1; i >= 0; --i)
{
//do Something
}
需要对$做反向操作。所以我用了维奈的想法:
//jQuery.each(collection, callback) =>
$.each($(collection).get().reverse(), callback func() {});
很好,谢谢
如果你不想保存方法到jQuery。Fn你可以用
[].reverse.call($('li'));
我更喜欢创建一个反向插件
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);
});
我以世界上最小的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