jQuery通过单击链接来排列li命令

时间:2012-04-04 15:51:30

标签: javascript jquery html sorting

需要通过点击向上移动或向下移动来改变li位置。

<div>
  <ul>
    <li>Item1  <a class="moveUp">Move Up</a> <a class="moveDown">Move Down</a></li>
    <li>Item2  <a class="moveUp">Move Up</a> <a class="moveDown">Move Down</a></li>
    <li>Item3  <a class="moveUp">Move Up</a> <a class="moveDown">Move Down</a></li>
    <li>Item4  <a class="moveUp">Move Up</a> <a class="moveDown">Move Down</a></li>
    <li>Item5  <a class="moveUp">Move Up</a> <a class="moveDown">Move Down</a></li>
  </ul>
</div>

那么这里应该发生什么,例如,如果我们点击向上移动第2项,则第2项将在第1项之前向上移动。

我试着这样做,但它不起作用:

$(".moveUp").click(function () {
    var thisLine = $(this).parent();
    var prevLine = thisLine.prev();
    prevLine.insertAfter(thisLine);
});

希望有人可以帮助我...

5 个答案:

答案 0 :(得分:6)

试试这个:

$(".moveUp").click(function () {
    var thisLine = $(this).parent();
    var prevLine = thisLine.prev();
    prevLine.before(thisLine);
});

$(".moveDown").click(function () {
    var thisLine = $(this).parent();
    var prevLine = thisLine.next();
    prevLine.after(thisLine);
});

使用jsFiddle here

答案 1 :(得分:3)

试试这个。

$(".moveUp").click(function () {
    var $parent = $(this).parent();
    $parent.prev().before($parent);
});
$(".moveDown").click(function () {
    var $parent = $(this).parent();
    $parent.next().after($parent);
});

工作演示 - http://jsfiddle.net/vQmHU/

答案 2 :(得分:2)

当您尝试将元素向上移动或向下移动到底部时,这应该可以工作并且也不会将元素移动到UL之外:

$('.moveUp').click(function(){
    var liItem = $(this).parent();
    if (liItem.prev().is('li'))
    {
        liItem.insertBefore(liItem.prev())
    }
});

$('.moveDown').click(function(){
    var liItem = $(this).parent();
    if (liItem.next().is('li'))
    {
        liItem.insertAfter(liItem.next())
    }
});

工作示例:http://jsfiddle.net/BDecp/

此外,您的代码应该包含在此:

$(document).ready(function () {
    //Code Here
});

答案 3 :(得分:1)

这个只重新排列列表项:

$(".moveUp").click(function () {
  var $parent = $(this).parent().closest("li");
  $parent.prev().before($parent);
});

$(".moveDown").click(function () {
  var $parent = $(this).parent().closest("li");
  $parent.next().after($parent);
});

答案 4 :(得分:0)

http://jsfiddle.net/j7xtS/2/

$('ul').on('click', 'a', function(){
    var $this = $(this),
        $li = $this.parent();

    if ($this.hasClass('moveUp') &&  $li.prev().length>0){
        $li.prev().before($li[0]);
    }
    else if ($this.hasClass('moveDown') && $li.next().length>0){
        $li.next().after($li[0]);
    }
});​