У меня есть дочерние элементы div, которые я пытаюсь отсортировать на основе значения jquery .data (), которое я даю им, что это просто одно число. Этот код работает отлично, но только один раз, после этого я не могу понять, какого черта он их сортирует. Вот упрощенная версия:
var myArray = $('#container div').get();
myArray.sort(function(x,y) {
return $(x).data('order') - $(y).data('order');
});
$('#container').empty().append(myArray);
Я пробовал так много других методов сортировки, других плагинов и т. Д., И я не могу заставить что-либо работать правильно. Это так близко, как я могу получить. Я просто запустил это событие jquery change.
Вот и все, на случай, если я сделаю что-нибудь глупое в другом месте:
$('#attorneyFilter').change(function() {
//get array of links for sorting
var myArray = $('#attorneyBlocks div').get();
var selectedArea = $(this).val();
//sort alphabetically when "all" is selected
if (selectedArea == 'all') {
$('#attorneyBlocks div').show();
myArray.sort(function(a,b) {
return $(a).text() > $(b).text() ? 1 : -1;
});
//filter attorneys based on practice area and then assign its order# to the div with data, getting all values from the div's class
} else {
$('#attorneyBlocks div').hide().each(function() {
var attorneyArea = $(this).attr('class').split(', ');
for (var i=0;i<attorneyArea.length;i++) {
var practiceArea = attorneyArea[i].split('-');
if (selectedArea == practiceArea[0]) {
$(this).show().data('order',practiceArea[1]);
}
}
});
//sort based on order, the lower the number the higher it shows up
myArray.sort(function(x,y) {
return $(x).data('order') - $(y).data('order');
});
}
//append order back in
$('#attorneyBlocks').empty().append(myArray);
});
И ссылка на страницу вопроса