2012-01-03 3 views
10

У меня есть нормальный неупорядоченный списокКак перемещать элементы списка?

<ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
</ul> 

При нажатии на любой из пунктов списка он должен появиться второй в списке, если возможно, одушевленных на вторую позицию.

Я знаю, что легкое решение для этого было бы относительно позиционировать UL и полностью позиционировать LI и установить верхнее положение, но это невозможно из-за способа написания разметки.

ответ

17

Это делает все, кроме анимации:

$('li').click(function() { 
    var $this = $(this); 
    $this.insertAfter($this.siblings(':eq(0)')); 
}); 

При нажатии на элементе списка, он будет вставить его после первого элемента в <ul>, то есть вторая позиция в списке.

Кроме того, вы можете анимировать это различными способами. Вот один из них:

$('li').click(function() { 
    var $this = $(this), 
     callback = function() { 
      $this.insertAfter($this.siblings(':eq(0)')); 
     }; 
    $this.slideUp(500, callback).slideDown(500); 
}); 

Вот working demo.

+0

Работает с удовольствием! Знаете ли вы, может ли его даже оживить то, от чего я должен двигаться дальше? –

+0

Это зависит от того, как вы хотите его оживить. Я обновил свой ответ с помощью базового примера анимации. – FishBasketGordo

1

Добавить id в неупорядоченный список (<ul id="list">) и добавить его после второго ребенка.

$('#list li').click(function() { 
    $(this).insertAfter("#list li:nth-child(1)"); 
}); 

Это работает только для элементов после того, как первый, но пример на jsFiddle.

Смежные вопросы