重新排列列表元素 – jQuery?
是否有可能使用JavaScript或纯jQuery对<li>
元素进行重新sorting。 所以,如果我有一个愚蠢的名单,如下所示:
<ul> <li>Foo</li> <li>Bar</li> <li>Cheese</li> </ul>
我将如何移动列表元素? 就像在Foo
列表元素前加上Cheese
列表元素,或者将Foo
移到Bar
后面。
可能吗? 如果是这样,怎么样?
var ul = $("ul"); var li = ul.children("li"); li.detach().sort(); ul.append(li);
这是一个简单的例子,其中<li>
节点按某种默认顺序sorting。 我正在调用detach以避免删除与li节点相关的任何数据/事件。
您可以传递函数进行sorting,并使用自定义比较器进行sorting。
li.detach().sort(function(a, b) { // use whatever comparison you want between DOM nodes a and b });
如果有人正在寻找重新sorting的元素上移/下移一些列表一步一步一步…
//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);
下面是一个jQuery插件来帮助这个function: http : //tinysort.sjeiti.com/
我最喜欢jQuery的一件事就是如此快速地编写小小的附加组件是多么容易。
在这里,我们创build了一个小插件,它接受一个select器数组,并使用它来sorting目标元素的子项。
// 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" ]);
<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>
像这样的东西?
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...
更多这里here1和here2
看看jQuery UI可sorting