2012-04-04 12 views
7

Necesita cambiar la posición de li haciendo clic para mover hacia arriba o hacia abajo.jQuery arregle la orden li haciendo clic en un enlace

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

Entonces, ¿qué debe ocurrir aquí, por ejemplo, si hacemos clic en Subir en Item2, el artículo 2 se moverá hacia arriba antes del Tema 1.

He probado a hacerlo así, pero no lo hace trabajo:

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

la esperanza que alguien me puede ayudar ...

+1

Si hay una respuesta que ha trabajado para usted, por favor marcarlo como la respuesta aceptada – JakeJ

Respuesta

2

Esto debería funcionar y no se moverá el elemento exterior de la UL cuando se intenta y se mueve hacia arriba en la parte superior o hacia abajo en la parte inferior:

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

Ejemplo de trabajo: http://jsfiddle.net/BDecp/

Además, el código debe ser envuelto con esto:

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

Jake ... en primer lugar muchas gracias .. eso es un buen código .. – user1309015

3

Pruebe esto.

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

demostración de trabajo - http://jsfiddle.net/vQmHU/

+0

Gracias por su respuesta, bueno Shankar ... – 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 ... muchos tks amigo ... – user1309015

1

éste sólo reordena los elementos de la lista:

$(".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); 
}); 
Cuestiones relacionadas