Как динамически применить класс при выполнении пользовательской разбивки на страницы?

#javascript #jquery #html #css #pagination

#javascript #jquery #HTML #css #разбивка на страницы

Вопрос:

У меня на экране есть пользовательская разбивка на страницы. Теперь проблема в том, что я выполняю разбивку на страницы

  1. как мне применить active class при перемещении вперед и назад с использованием разбивки на страницы.
  2. Как мне применить active class , когда я нажимаю на число.

Я пробовал с javascript, но это создает конфликты, поскольку на странице много одинаковых значений. Также, если мне нужно добавить дополнительное li при нажатии next, например, 8 после 7, возможно ли это сделать в той же функции?

Пожалуйста, найдите мой рабочий код для разбивки на страницы:

CSS:

 /*Pagination CSS*/      

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

/*Pagination CSS Ends here*/
  

HTML:

 <div class="center">
  <ul class="pagination">
    <li><a href="#">«</a></li>
    <li><a id="test1" href="#">1</a></li>
    <li><a id="test2" class="active" href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">6</a></li>
    <li><a href="#">7</a></li>
    <li><a href="#" onclick="test()">»</a></li>
  </ul>
</div>
  

Javascript:

 function test() {
    alert($('#myForm').find("input[value='"   1   "']").attr('id'));
    document.getElementById("test2").className = "";
    document.getElementById("test1").className = "active";
    alert("test1");
}
  

Комментарии:

1. Используете ли вы Jquery?

2. Если вы уже используете jQuery, почему бы не сделать $('#test1').addClass('active')

3. @Tasos Да. Смотрите первую строку внутри предупреждения

4. Что ж, если вы хотите сделать это только на JS, вот решение, в противном случае addClass() removeClass() в jquery упрощает работу jaketrent.com/post/addremove-classes-raw-javascript

5. @Tasos да, используя jquery

Ответ №1:

Я предоставляю полный пример, с предотвращением выбора стрелок (предыдущий, следующий)

 $('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="#">' 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="#">1</a></li>
    <li><a id="test2" class="active" href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">6</a></li>
    <li><a href="#">7</a></li>
    <li><a href="#" id="next">»</a></li>
  </ul>
</div>  

Комментарии:

1. Убедитесь, что при щелчке на текущем активном элементе активный класс теряется

2. Спасибо .. Работает хорошо. но вы ответили частично. Если вы можете ответить на полный вопрос, я приму ваш ответ.

3. @Shirishвы хотите добавить дополнительную кнопку с номером страницы при нажатии далее, если она уже достигла конца?

4. Да, @Sojtin. Правильно.

5. Идеальный братан.. Я приму ваш ответ. Большое спасибо 🙂

Ответ №2:

 $('ul.pagination li a').on('click', function () {
  var $this = $(this),
      $active = $('ul.pagination li a.active'),      
      $elem;

  if ($this.is($active)) {
    return;
  }

  switch ($this.attr('id')) {
    case 'prev':
      $elem = $active.parent().prev().children('a');
      if ($this.is($elem)) {
        return;
      }
      $elem.addClass('active');
      break;

    case 'next':
      $elem = $active.parent().next().children('a');
      if ($this.is($elem)) {
        return;
      }
      $elem.addClass('active');
      break;

    default: 
      $this.addClass('active');
      break;
  }

  $active.removeClass('active');
});  
 /*Pagination CSS*/      

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

/*Pagination CSS Ends here*/  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="center">
  <ul class="pagination">
    <li><a href="#" id="prev">«</a></li>
    <li><a href="#">1</a></li>
    <li><a class="active" href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">6</a></li>
    <li><a href="#">7</a></li>
    <li><a href="#"id="next">»</a></li>
  </ul>
</div>  

Комментарии:

1. Спасибо. Это работает хорошо. Если вы можете любезно помочь мне с полным вопросом, я приму это как ответ.

Ответ №3:

прежде всего, дайте активный класс li и измените css, чтобы применить стиль к a тегу под li с классом active

в тестовой функции напишите это:

 var index = $(".pagination > li.active").index();
$(".pagination > li.active").removeClass("active")
$(".pagination > li").eq(index-1).addClass("active")
  

и когда вы нажимаете на специальный элемент разбивки на страницы, сделайте это:

 $(".pagination > li").on("click",function(){
      $(".pagination > li.active").removeClass("active");
      $(this).addClass("active");
})
  

Ответ №4:

Сначала я бы предложил иметь параметр в test функции, который уведомлял бы о следующем / предыдущем. Затем вы должны выполнить поиск current element , а затем двигаться в соответствующем направлении.

Я также добавил обработку для выбора любой страницы.

 $('.pagination li').on('click', function() {
  var $this = $(this)
  if ($this.data('action')) {
    $this.removeClass('active');
    if (index > 0) {
      $this.closest('li').next().find('a').addClass('active');
    } else {
      $this.closest('li').prev().find('a').addClass('active');
    }
  } else {
    $('.pagination li a').removeClass('active');
    $this.find('a').addClass('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.0.0/jquery.min.js"></script>
<div class="center">
  <ul class="pagination">
    <li><a href="#" onclick='test(-1)'>«</a>
    </li>
    <li><a href="#">1</a>
    </li>
    <li><a class="active" href="#">2</a>
    </li>
    <li><a href="#">3</a>
    </li>
    <li><a href="#">4</a>
    </li>
    <li><a href="#">5</a>
    </li>
    <li><a href="#">6</a>
    </li>
    <li><a href="#">7</a>
    </li>
    <li><a href="#" onclick="test(1)">»</a>
    </li>
  </ul>
</div>