В следующем exampmle я устанавливаю массив объектов и сортирую их по ключевому параметру (положению). Затем мне нужно вывести результат - но как? См. Комментарий в коде.
$(document).ready(function () {
function sortHooks(){
// add modules
var modules = [
{ module: 'navbar', hook: 'hook-header', position: '2'},
{ module: 'logo', hook: 'hook-header', position: '3'},
{ module: 'description', hook: 'hook-header', position: '1'}
];
// sort by "position" ASC
function byPosition(a,b) {
if (a.position < b.position)
return -1;
if (a.position > b.position)
return 1;
return 0;
}
// jQuery function with the given parameters
/* for each modules as modules
for each hook as hook
do the following:
$( '#' + module )prependTo( '#' + hook )
so for the given example it should return
$('#description')prependTo('hook-header')
$('#navbar')prependTo('hook-header')
$('#logo')prependTo('hook-header')
so they can be executed in that specific order.
And since we're using "prepend" that will mean
that the items be placed like this:
#logo
#navbar
#description
*/
return ???
}
// Execute sortHooks function
sortHooks();
});
Может быть, что-то вроде этого, но я не совсем уверен:
$.each(modules, function(index, value) {
$( '#' + value.module ).prependTo( '#' + value.hook ));
});
Я также пробовал кучу других вещей, один из них - элементы Hook с insertAfter, но остался в parent - jQuery, который работал отлично, но если позиция была выше, чем у детей внутри родителя, он не знал, что сделать это и вызвать много нежелательного поведения.
просто используйте обычный цикл
for(var i=0; i<modules.length; i++){
$( '#' + modules[i].module )prependTo( '#' + modules[i].hook );
}
function byPosition(a,b) { return a.position-b.position; }
modules.sort(byPosition);
modules.forEach(function(obj){
$('#'+obj.madule).prependTo('#'+obj.hook);
});
forEach
недоступен в IE <9
function byPosition(a,b) { return a.position-b.position; }