JQuery用find()反转each()

时间:2011-10-21 00:48:53

标签: javascript jquery

我知道之前已经问过这种问题,但是一般的解决方法

$($("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*/
        });
    }
});

非常感谢任何帮助。感谢。

2 个答案:

答案 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插件。