Ответ 1
.add()
возвращает новый объект jQuery. Измените эту строку:
result.add(ar[i].elmt);
:
result = result.add(ar[i].elmt);
Это все равно не будет работать, хотя
Как и в jQuery 1.4, результаты из .add() всегда будут возвращаться в порядке документа (а не в простой конкатенации).
Итак, вы просто используете ванильный массив JS, 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);