การแบ่งหน้า: ลบองค์ประกอบโดยใช้ jquery หรือไม่

ฉันมีส่วนที่ต้องแบ่งหน้าบันทึก ตอนนี้ปัญหาคือมีการเพิ่มหมายเลข แต่ฉันต้องการลบหมายเลขก่อนหน้า

ขณะนี้ฉันมีบางอย่างดังนี้:

ก่อนหน้า 1 2 3 ถัดไป

เมื่อฉันคลิกที่ 4 ถัดไปจะถูกเพิ่มและกลายเป็น ก่อนหน้า 1 2 3 4 ถัดไป

เมื่อฉันคลิกถัดไปอีกครั้ง 5 จะถูกเพิ่มและกลายเป็นก่อนหน้า 1 2 3 4 5 ถัดไป

สิ่งที่ฉันพยายามทำและสิ่งที่ควรมี

ก่อนหน้า 1 2 3 ถัดไป

เมื่อฉันคลิกที่ 4 ถัดไปจะถูกเพิ่ม และควรกลายเป็น ก่อนหน้า 2 3 4 ถัดไป

เมื่อฉันคลิกถัดไปอีกครั้ง 5 จะถูกเพิ่มและกลายเป็นก่อนหน้า 3 4 5 ถัดไป

เมื่อฉันคลิกที่ Previous Now มันควรจะเป็น Prev 2 3 4 Next

กรุณาค้นหารหัสที่รันได้ของฉันด้านล่าง:

$('ul.pagination').on('click', 'a', function() { // listen for click on pagination link
    if($(this).hasClass('active')) return false;
  
    var active_elm = $('ul.pagination a.active');
  
    if(this.id == 'next'){
      var _next = active_elm.parent().next().children('a');
      if($(_next).attr('id') == 'next') {
        
        // appending next button if reach end
        var num = parseInt($('a.active').text())+1;
        active_elm.removeClass('active');
        $('<li><a class="active" href="/th#">'+num+'</a></li>').insertBefore($('#next').parent());
        return; 
      }
      _next.addClass('active');   
      
      
      
      
    }
    else if(this.id == 'prev') {
      var _prev = active_elm.parent().prev().children('a');
      if($(_prev).attr('id') == 'prev') return false;
      _prev.addClass('active');   
    } else {
      $(this).addClass('active');
    }
    active_elm.removeClass('active');
    
});
ul.pagination {
    display: inline-block;
    padding: 0;
    margin: 0;
}

ul.pagination li {display: inline;}

ul.pagination li a {
    color: black;
    float: left;
    padding: 8px 16px;
    text-decoration: none;
    transition: background-color .3s;
    border: 1px solid #ddd;
}

ul.pagination li a.active {
    background-color: #4CAF50;
    color: white;
    border: 1px solid #4CAF50;
}

ul.pagination li a:hover:not(.active) {background-color: #ddd;}

div.center {text-align: center;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="center">
  <ul class="pagination">
    <li><a id="prev">«</a></li>
    <li><a id="test1" href="/th#">1</a></li>
    <li><a id="test2" class="active" href="/th#">2</a></li>
    <li><a href="/th#">3</a></li>
    <li><a href="/th#" id="next">»</a></li>
  </ul>
</div>


person sTg    schedule 28.11.2016    source แหล่งที่มา
comment
ฉันได้เพิ่ม html เช่นกัน   -  person sTg    schedule 28.11.2016
comment
paginationjs.com   -  person mplungjan    schedule 28.11.2016
comment
เพิ่มตัวอย่างแล้ว   -  person sTg    schedule 28.11.2016
comment
stackoverflow.com/questions/18679611/   -  person mplungjan    schedule 28.11.2016
comment
@sTg คุณต้องการจำกัดปุ่มเพียง 3 หน้าเท่านั้นใช่ไหม   -  person Beginner    schedule 28.11.2016
comment
@NewbeeDev ใช่ฉันได้กล่าวถึงข้อกำหนดแล้ว   -  person sTg    schedule 28.11.2016
comment
นี่คือจุดเริ่มต้น: var $first = $("#prev").parent().next(); _next = $first.find("a");_next.text(num); $first.insertBefore($('#next').parent());   -  person mplungjan    schedule 28.11.2016


คำตอบ (3)


ฉันจะทำอย่างไรต่อไปนี้
ฉันจะเพิ่มคลาสให้กับแท็ก 3 <li> โดยมีตัวเลขอยู่ข้างในเพื่อให้เข้าถึงได้ง่ายด้วยตัวเลือก jQuery ภายในคำสั่ง if ที่คุณตรวจสอบสภาพอากาศ ปุ่มถัดไปจะมี id next ให้ลบรายการย่อยแรกดังนี้:

$('.three_links').first().remove();

และเพิ่มหมายเลขถัดไปหลังลูกสุดท้ายดังนี้:

$('.three_links').last().after('<li class="three_links"><a class="active" href="/th#">'+num+'</a></li>');

และถ้ารหัสเป็น prev ให้ลบลูกคนสุดท้ายออกและเพิ่มหมายเลขก่อนหน้าก่อนลูกคนแรก แต่เฉพาะในกรณีที่หมายเลขก่อนหน้ามากกว่า 1:

if(num > 0){
    active_elm.removeClass('active');
    $('.three_links').last().remove();
    $('.three_links').first().before('<li class="three_links"><a class="active" href="/th#">'+num+'</a></li>');
}

นี่คือ jsfiddle ที่ใช้งานได้

HTML:

<div class="center">
    <ul class="pagination">
        <li><a href="/th#" id="prev">«</a></li>
        <li class="three_links"><a id="test1" href="/th#">1</a></li>
        <li class="three_links"><a id="test2" class="active" href="/th#">2</a></li>
        <li class="three_links"><a id="test3" href="/th#">3</a></li>
        <li><a href="/th#" id="next">»</a></li>
    </ul>
</div>

js:

$('ul.pagination').on('click', 'a', function() { // listen for click on pagination link
    if($(this).hasClass('active')) return false;

    var active_elm = $('ul.pagination a.active');

    if(this.id == 'next'){
        var _next = active_elm.parent().next().children('a');
        if($(_next).attr('id') == 'next') {

            // appending next button if reach end
            var num = parseInt($('a.active').text())+1;
            active_elm.removeClass('active');
            $('.three_links').first().remove();
            $('.three_links').last().after('<li class="three_links"><a class="active" href="/th#">'+num+'</a></li>');
            return; 
        }
        _next.addClass('active');   
    }
    else if(this.id == 'prev') {
        var _prev = active_elm.parent().prev().children('a');
        if($(_prev).attr('id') == 'prev'){
            var num = parseInt($('a.active').text())-1;
            if(num > 0){
                active_elm.removeClass('active');
                $('.three_links').last().remove();
                $('.three_links').first().before('<li class="three_links"><a class="active" href="/th#">'+num+'</a></li>');
            }
            return;
        }
        _prev.addClass('active');   
    } else {
        $(this).addClass('active');
    }
    active_elm.removeClass('active');
});
person Timo    schedule 28.11.2016

ใช้สิ่งนี้หลังจากเพิ่มหมายเลขถัดไป

$('#prev').parent().next().remove();

http://codepen.io/mastersmind/pen/ZBJZjo

person mastermind    schedule 28.11.2016
comment
ฉันจะไปก่อนหน้านี้ได้อย่างไร? - person sTg; 28.11.2016

ใช้สคริปต์ด้านล่าง:

$('ul.pagination').on('click', 'a', function() { // listen for click on pagination link
    if($(this).hasClass('active')) return false;

    var active_elm = $('ul.pagination a.active');

    if(this.id == 'next'){
      var _next = active_elm.parent().next().children('a');
      if($(_next).attr('id') == 'next') {

        // appending next button if reach end
        var num = parseInt($('a.active').text())+1;
        active_elm.removeClass('active');
        $('<li><a class="active" href="/th#">'+num+'</a></li>').insertBefore($('#next').parent());
        var hidenum = parseInt($('a.active').text())-2;
        if(hidenum > 0){
            $('#next').parent().prev().prev().prev().prev().hide();
        }
        return; 
      }
      _next.addClass('active');   




    }
    else if(this.id == 'prev') {
      var _prev = active_elm.parent().prev().children('a');
      if($(_prev).attr('id') == 'prev') return false;
      _prev.addClass('active'); 
    } else {
      $(this).addClass('active');
    }
    active_elm.removeClass('active');

});
person Prashant Valanda    schedule 28.11.2016