2012-04-04 17 views
7

Konieczność zmiany pozycji li poprzez kliknięcie w celu przejścia w górę lub w dół.jQuery zorganizuj zamówienie LI klikając na link

<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> 

Więc co powinno się zdarzyć tutaj, na przykład, jeśli kliknij przycisk Przenieś w górę na ITEM2 pozycja 2 przesunie się przed pkt 1.

tryed zrobić w ten sposób, ale to nie robi praca:

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

Nadzieja ktoś może mi pomóc ...

+1

Jeśli nie ma odpowiedzi, który pracował dla was, proszę zaznaczyć go jako zaakceptowanej odpowiedź – JakeJ

Odpowiedz

2

To powinno działać i nie będzie również przesunąć element poza UL podczas próby i przenieść go na górze lub w dół dno:

$('.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()) 
    } 
}); 

Przykład roboczy: http://jsfiddle.net/BDecp/

Również Twój kod powinien być opakowane z tym:

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

Jake .. przede wszystkim wielkie dzięki .. to jest to dobry kod .. – user1309015

3

Spróbuj tego.

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

demo Praca - http://jsfiddle.net/vQmHU/

+0

TKS za odpowiedź, dobra Shankara ... – user1309015

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]); 
    } 
});​ 
+0

Bart ... wielu tks kolesia .. – user1309015

1

ten przestawia tylko elementy listy:

$(".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); 
}); 
Powiązane problemy