Чтобы сделать эту сортировку напрямую, используя дочерние значения и без плагина, вы можете использовать что-то вроде:
function sortUsingNestedText(parent, childSelector, keySelector) {
var items = parent.children(childSelector).sort(function(a, b) {
var vA = $(keySelector, a).text();
var vB = $(keySelector, b).text();
return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
});
parent.append(items);
}
Сортировка по цене может быть выполнена следующим образом:
sortUsingNestedText($('#sortThis'), "div", "span.price");
Функция параметризована, так что ее можно легко использовать с другими элементами div и различными ключами сортировки.
Вот демоверсия: http://jsfiddle.net/tc5dc/
Использование плагина tinysort
В качестве альтернативы, если вы можете воспользоваться функциями, предоставляемыми плагином tinysort (упомянутым в вопросе), вы можете динамически увеличивать число элементов div в соответствии с плагином.
Проверьте это демо: http://jsfiddle.net/6guj9/
В этом примере мы сначала добавляем значения price
и style
в качестве атрибутов данных хранения div:
var sortThis = $('#sortThis').children("div");
sortThis.each(function() {
var p = $(this);
p.attr("data-price", p.find("span.price").text());
p.attr("data-style", p.find("span.style").text());
});
Теперь мы можем использовать tinysort для сортировки по соответствующим атрибутам. Сортировка по цене будет просто:
$("#sortThis>div").tsort({attr:"data-price"});
Изменить порядок сортировки и ключи можно, просто передав различные объекты конфигурации. Прилагаемая демонстрация демонстрирует один из способов сделать это, но вы, вероятно, можете придумать лучшую схему, соответствующую вашим потребностям.