#javascript #jquery #html #css #pagination
#javascript #jquery #HTML #css #разбивка на страницы
Вопрос:
У меня на экране есть пользовательская разбивка на страницы. Теперь проблема в том, что я выполняю разбивку на страницы
- как мне применить
active
class
при перемещении вперед и назад с использованием разбивки на страницы. - Как мне применить
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>