Search code examples
javascriptjquerylistelementmove

I can't move element a lastposition and first position


My list of countries I can't move item current and last position and firs position. But move element down and up position is correct.

My HTML:

<div class="ListCountries">
  <div class="item">Argentina</div>
  <div class="item">Bolivia</div>
  <div class="item">Brasil</div>
  <div class="item">Chile</div>
  <div class="item">Colombia</div>
  <div class="item">Ecuador</div>
  <div class="item">Paraguay</div>
  <div class="item">Peru</div>
  <div class="item">Uruguay</div>
  <div class="item">Venezuela</div>
</div>

My Javascript/jQuery:

$(".item").append("<p><button class='down'>down↓</button><button class='up'>up↑</button><button class='first'>Move First</button><button class='last'>Move last</button></p>");

$(document).on("click",".up",function() {
    var ob = $(this).closest('.item');
    ob.insertBefore(ob.prev());
});

$(document).on("click",".down",function() {
    var ob = $(this).closest('.item');
    ob.insertAfter(ob.next());
});

$(document).on("click",".first",function() {
    var ob = $(this).closest('.item');
    ob.insertAfter(ob.prepend());
});

$(document).on("click",".last",function() {
    var ob = $(this).closest('.item');
    ob.insertAfter(ob.append());
});

My jsFiddle:

https://jsfiddle.net/cds0f5yp/20/

What am I doing wrong?


Solution

  • Try this:

    $(".item").append("<p><button class='down'>down↓</button><button class='up'>up↑</button><button class='first'>Move First</button><button class='last'>Move last</button></p>");
    
    $(document).on("click",".up",function() {
        var ob = $(this).closest('.item');
        ob.insertBefore(ob.prev());
    });
    
    $(document).on("click",".down",function() {
        var ob = $(this).closest('.item');
        ob.insertAfter(ob.next());
    });
    
    $(document).on("click",".first",function() {
        var ob = $(this).closest('.item');
        ob.parent().prepend(ob);
    });
    
    $(document).on("click",".last",function() {
        var ob = $(this).closest('.item');
        ob.parent().append(ob);
    });
    

    Fiddle Link