从单独的jQuery对象创建一个jQuery对象集合

前端之家收集整理的这篇文章主要介绍了从单独的jQuery对象创建一个jQuery对象集合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
$.fn.sortByDepth = function() {
    var ar = [];
    var result = $([]);

    $(this).each(function() {
        ar.push({length: $(this).parents().length,elmt: $(this)});
    });
    ar.sort(function(a,b) {
        return b.length - a.length;
    });
    for (var i=0; i<ar.length; i++) {
        result.add(ar[i].elmt);
    };
    alert(result.length);
    return result;
};

在这个函数中,我尝试从单独的jQuery对象创建一个jQuery集合.我怎样才能做到这一点 ?

以下代码无效:

result.add(ar[i].elmt);

jsfiddle:http://jsfiddle.net/hze3M/14/

解决方法

.add()返回一个新的jQuery对象.更改此行:
result.add(ar[i].elmt);

到这个:

result = result.add(ar[i].elmt);

这仍然不行

As of jQuery 1.4 the results from .add() will always be returned in document order (rather than a simple concatenation).

所以你只需使用一个香草JS数组,将()排序的元素推入它,然后$()整个事情.

其他代码清理:

$.fn.sortByDepth = function() {
    var ar = this.map(function() {
            return {length: $(this).parents().length,elt: this}
        }).get(),result = [],i = ar.length;


    ar.sort(function(a,b) {
        return a.length - b.length;
    });

    while (i--) {
        result.push(ar[i].elt);
    }
    return $(result);
};


var x = $('input').sortByDepth().map(function() {
    return this.id;
}).get().join(' - ');

$('#selection').text(x);

http://jsfiddle.net/mattball/AqUQH/.

猜你在找的jQuery相关文章