2012-04-03 4 views
2

Я получил этот код для сортировки неупорядоченного списка в отношении их атрибута title на месте.Сортировка элементов списка неупорядоченного списка в Chrome

$('#list li').sort(function(a,b) { 
    return $(a).attr('title') < $(b).attr('title'); 
}).appendTo('#list'); 

Он отлично работает на Firefox и IE, но он не будет работать на Chrome, как только граф элемент списка превышает 10 (см http://jsbin.com/atoput/4)

Есть ли лучше/легче/быстрее способ сортировки элементов на летать, и возможно, у вас есть объяснение того, что делает здесь Chrome?

ответ

4

Используйте это:

$(document).ready(function() { 
    var list = $('#list'); 
    var items = list.children('li').get(); 
    items.sort(function(a, b) { 
    var A = a.title; 
    var B = b.title; 
    return (A < B) ? -1 : (A > B) ? 1 : 0; 
    }); 
    $.each(items, function(idx, itm) { list.append(itm); }); 
}); 

изображение можно увидеть here.

Если вы хотите, чтобы список для сортировки на основе убывающем порядке, переключите вокруг знаков:

return (A > B) ? -1 : (A < B) ? 1 : 0; 
+0

Я не вижу, как это может работать. 'items' - это массив, который не имеет метода' .appendTo() '. – jfriend00

+0

Вы правы, извините. Обновлен мой ответ – hohner

+2

Одна вещь, которую я бы изменила, - это то, почему используется гораздо медленнее '$ (a) .attr ('title')', когда 'a.title' работает нормально? – jfriend00

Смежные вопросы