Чтобы добавить решение для обновленной информации, о которой идет речь:
var ul = document.getElementsByTagName('ul')[0],
lis = ul.getElementsByTagName('li'),
order = ["a-link", "b-link", "c-link", "d-link", "e-link", "f-link"],
toInsert = "b-link",
i = $.inArray( toInsert, order ),
el = lis[ toInsert ],
new_li;
if( !el && i > -1 ) {
do el = lis[ order[ ++i ] ];
while( i < order.length && !el )
(new_li = document.createElement('li')).id = new_li.innerHTML = toInsert;
if( el ) ul.insertBefore( new_li, el );
else ul.appendChild( new_li );
}
Используются преимущества «живых» списков и тот факт, что элементы в списке доступны с помощьюих идентификатор как свойство списка.
JSFIDDLE DEMO
первоначальный ответ:
Это должно сделать это:
var order = ["a-link", "b-link", "c-link", "d-link", "e-link", "f-link"],
i = 0,
place = $('ul'),
el = $('#' + order[i] );
if( !el.length ) {
$('<li>',{id:order[i]}).prependTo( place );
} else {
do {
++i;
place = el;
el = $('#' + order[i] );
} while( el.length )
if( i < order.length ) {
$('<li>',{id:order[i]}).insertAfter( place );
}
}
JSFIDDLE DEMO
Вотдругой способ сделать это:
var order = ["a-link", "b-link", "c-link", "d-link", "e-link", "f-link"],
prev,
el;
$.each( order, function(i,v) {
prev = el;
el = $('#' + v);
if( !el.length ) {
if( !i ) {
$('<li>',{id:order[i],text:order[i]}).appendTo('ul');
} else {
$('<li>',{id:order[i],text:order[i]}).insertAfter( prev );
}
return false;
}
});
JSFIDDLE DEMO