重新排序列表元素 - jQuery?

Ale*_*lex 53 javascript jquery

是否可以<li>使用JavaScript或纯jQuery 重新排序元素.所以,如果我有一个如下的愚蠢列表:

<ul>
    <li>Foo</li>
    <li>Bar</li>
    <li>Cheese</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我如何移动列表元素?就像把list元素放在list元素Cheese之前Foo或者移到Fooafter之后Bar.

可能吗?如果是这样,怎么样?

Anu*_*rag 84

var ul = $("ul");
var li = ul.children("li");

li.detach().sort();
ul.append(li);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的示例,其中<li>节点按默认顺序排序.我正在调用detach以避免删除与li节点关联的任何数据/事件.

您可以传递一个函数进行排序,并使用自定义比较器进行排序.

li.detach().sort(function(a, b) {
   // use whatever comparison you want between DOM nodes a and b
});
Run Code Online (Sandbox Code Playgroud)

  • 美丽的方案.正是我需要的.谢谢你,先生,在这个美好的星期五下午不要思考 (7认同)
  • 对我来说很好.这是jsfiddle的例子:http://jsfiddle.net/Afbrt/ (5认同)
  • 直到关于“detach()”。谢谢! (2认同)
  • 我不明白为什么需要`detach`? (2认同)

ale*_*exg 35

如果有人想要通过一次一步地向上/向下移动它们来重新排序元素......

//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);
Run Code Online (Sandbox Code Playgroud)

  • 这就是我喜欢stackoverflow的原因.谢谢@alexg (10认同)

San*_*ord 9

关于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"
]);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

该函数向后循环遍历数组并使用,.prepend以便将任何未选择的元素推送到最后.


den*_*icz 6

这是一个jQuery插件来帮助这个功能:http://tinysort.sjeiti.com/