我有一个这样的菜单:
<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>
有没有一种简单的方法可以使用jquery重新排序元素?我想象的是这样的事情:
$('#menuAbout').moveDown().moveDown()
但是,任何其他实现这一目标的方式都值得赞赏。
答案 0 :(得分:23)
实际上并不那么难。 JQuery几乎可以通过“insertBefore”和“insertAfter”方法自行获取。
function moveUp($item) {
$before = $item.prev();
$item.insertBefore($before);
}
function moveDown($item) {
$after = $item.next();
$item.insertAfter($after);
}
你可以使用这些 下移($( '#menuAbout')); 并且menuAbout项目将向下移动。
如果你想扩展jQuery以包含这些方法,你可以这样写:
$.fn.moveUp = function() {
before = $(this).prev();
$(this).insertBefore(before);
}
$.fn.moveDown = function() {
after = $(this).next();
$(this).insertAfter(after);
}
现在您可以调用类似的函数 $( “#menuAbout”)下移();
答案 1 :(得分:5)
没有原生的原型方法,但你可以轻松制作一个:
$.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()
答案 2 :(得分:1)
您还可以在父级上使用display: flex
,然后再使用order
function reset()
{
jQuery("#a").css("order", 10);
jQuery("#b").css("order", 20);
jQuery("#c").css("order", 30);
}
function reorder1()
{
jQuery("#a").css("order", 30);
jQuery("#b").css("order", 20);
jQuery("#c").css("order", 10);
}
function reorder2()
{
jQuery("#a").css("order", 30);
jQuery("#b").css("order", 10);
jQuery("#c").css("order", 20);
}
#main { display: flex; }
#a { color: red; }
#b { color: blue; }
#c { color: green; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="main">
<div id="a">Foo</div>
<div id="b">Bar</div>
<div id="c">Baz</div>
</div>
<button onclick="reset()">Reset</button>
<button onclick="reorder1()">Reorder 1</button>
<button onclick="reorder2()">Reorder 2</button>