I have a menu like this:
<ul id="menu" class="undecorated">
<li id="menuHome"><a href="/">Home</a> </li>
<li id="menuAbout"><a href="/Usergroup/About">About</a> </li>
<li id="menuArchives"><a href="/Usergroup/Archives">Archives</a> </li>
<li id="menuLinks"><a href="/Usergroup/Links">Links</a> </li>
</ul>
Is there a simple way that I can use jquery to re-order elements? I'm imagining something like this:
$('#menuAbout').moveDown().moveDown()
But any other way of achieving this is appreciated.
It's actually not that hard. JQuery almost gets you there by itself with the insertBefore and insertAfter methods.
function moveUp($item) {
$before = $item.prev();
$item.insertBefore($before);
}
function moveDown($item) {
$after = $item.next();
$item.insertAfter($after);
}
You could use these like
moveDown($('#menuAbout'));
and the menuAbout item would move down.
If you wanted to extend jQuery to include these methods, you would write it like this:
$.fn.moveUp = function() {
before = $(this).prev();
$(this).insertBefore(before);
};
$.fn.moveDown = function() {
after = $(this).next();
$(this).insertAfter(after);
};
and now you can call the functions like
$("#menuAbout").moveDown();
No native prototypal methods, but you can make one easily:
$.fn.moveDown = function() {
return this.each(function() {
var next = $(this).next();
if ( next.length ) {
$(next).after(this);
} else {
$(this).parent().append( this );
}
})
}
$('#menuAbout').moveDown().moveDown()
This uses jQuery.prototype.after
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With