是否可以使用JavaScript或纯jQuery重新排序<li>
元素。所以如果我有一个如下的愚蠢列表:
<ul>
<li>Foo</li>
<li>Bar</li>
<li>Cheese</li>
</ul>
如何移动列表元素?就像将列表元素与Cheese
放在列表元素之前Foo
或将Foo
移到Bar
之后。
有可能吗?如果是这样,怎么样?
答案 0 :(得分:82)
var ul = $("ul");
var li = ul.children("li");
li.detach().sort();
ul.append(li);
这是一个简单的示例,其中<li>
个节点按默认顺序排序。我正在调用detach以避免删除与li节点相关的任何数据/事件。
您可以传递一个函数进行排序,并使用自定义比较器进行排序。
li.detach().sort(function(a, b) {
// use whatever comparison you want between DOM nodes a and b
});
答案 1 :(得分:34)
如果有人希望通过逐步向上/向下移动一些列表来重新排序元素......
//element to move
var $el = $(selector);
//move element down one step
if ($el.not(':last-child'))
$el.next().after($el);
//move element up one step
if ($el.not(':first-child'))
$el.prev().before($el);
//move element to top
$el.parent().prepend($el);
//move element to end
$el.parent().append($el);
答案 2 :(得分:8)
关于jQuery,我最喜欢的一件事就是如此快速地编写小小的附加组件是多么容易。
在这里,我们创建了一个小插件,它带有一系列选择器,并使用它来命令目标元素的子节点。
// Create the add-on
$.fn.orderChildren = function(order) {
this.each(function() {
var el = $(this);
for(var i = order.length - 1; i >= 0; i--) {
el.prepend(el.children(order[i]));
}
});
return this;
};
// Call the add-on
$(".user").orderChildren([
".phone",
".email",
".website",
".name",
".address"
]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="user">
<li class="name">Sandy</li>
<li class="phone">(234) 567-7890</li>
<li class="address">123 Hello World Street</li>
<li class="email">someone@email.com</li>
<li class="website">https://google.com</li>
</ul>
<ul class="user">
<li class="name">Jon</li>
<li class="phone">(574) 555-8777</li>
<li class="address">123 Foobar Street</li>
<li class="email">jon@email.com</li>
<li class="website">https://apple.com</li>
</ul>
<ul class="user">
<li class="name">Sarah</li>
<li class="phone">(432) 555-5477</li>
<li class="address">123 Javascript Street</li>
<li class="email">sarah@email.com</li>
<li class="website">https://microsoft.com</li>
</ul>
&#13;
该函数向后循环遍历数组并使用.prepend
,以便将任何未选中的元素推送到最后。
答案 3 :(得分:6)
这是一个jQuery插件,可以帮助实现此功能:http://tinysort.sjeiti.com/
答案 4 :(得分:4)
这样的事情?
var li = $('ul li').map(function(){
return this;
}).get();
$('ul').html(li.sort());
我有点失落你可能想要这样的东西......
$('ul#list li:first').appendTo('ul#list'); // make the first to be last...
$('ul#list li:first').after('ul#list li:eq(1)'); // make first as 2nd...
$('ul#list li:contains(Foo)').appendTo('ul#list'); // make the li that has Foo to be last...
答案 5 :(得分:3)
看一下jquery ui sortable