从单独的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); 

但是,这仍然行不通

从jQuery 1.4开始,.add()的结果将始终按文档顺序返回(而不是简单的连接)。

所以你只需要使用一个vanilla JS数组, push()排序后的元素push()放入其中,然后使用$()整个事物。


其他代码清理:

 $.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/

.add返回一个新对象,不会修改旧对象。

尝试改变:

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

至:

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

另外, $([])是不需要的,你可以做var result = $();