我知道之前已经问过这种问题,但是一般的解决方法
$($("input").get().reverse()).each(function() { /* ... */ });
不适合我。我有一个xml文档,其中包含我要在网页上显示的音乐会列表。所以,在JQuery中:
$.ajax({
type: "GET",
url: "concerts.xml",
dataType: "xml",
cache: false,
success: function(xml) {
$(xml).find('concert').each(function() {
/*do stuff*/
});
}
});
但是,我想以相反的顺序显示音乐会。所以,我尝试了以下方法,但它不起作用:
$.ajax({
type: "GET",
url: "concerts.xml",
dataType: "xml",
cache: false,
success: function(xml) {
$($(xml).find('concert').reverse()).each(function() {
/*do stuff*/
});
}
});
非常感谢任何帮助。感谢。
答案 0 :(得分:17)
您排除了对get()
[docs]方法的调用。
// --------------------v
$($(xml).find('concert').get().reverse()).each(function() {
这是从jQuery对象获取元素数组所必需的。这样您就可以拨打.reverse()
上的Array.prototype
。
答案 1 :(得分:2)
要以相反的顺序浏览项目,为什么不使用这样的代码:
var data = $("input");
for (var i = data.length - 1; i >= 0; i--) {
var item = data[i];
// do whatever you want to do with item here
}
或者,如果你想创建一个带有jQuery对象和函数的函数:
function reverseEach(jQueryObj, fn) {
for (var i = jQueryObj.length - 1; i >= 0; i--) {
if (fn.call(jQueryObj[i], i, jQueryObj[i]) === false) {
break;
}
}
}
所以,你可以打电话:
reverseEach($(xml).find('concert'), function() {
// do stuff here
});
或:
reverseEach($("input"), function() {
// do stuff here
});
或者,如果你愿意的话,你甚至可以将reverseEach变成一个jQuery插件。