#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Я хочу отобразить по 3 элемента на каждый раздел, со многими разделами, отличными от действия «Загрузить больше». мой код, как показано ниже:
<div class="wadah" id="list_1">
<a href="" class="wadah__item" id="list_item_1_1">
aaa
</a>
<a href="" class="wadah__item" id="list_item_1_2">
bbb
</a>
<a href="" class="wadah__item" id="list_item_1_3">
ccc
</a>
<a href="" class="wadah__item" id="list_item_1_4">
ddd
</a>
<a href="" class="wadah__item" id="list_item_1_5">
eee
</a>
<a href="" class="wadah__item" id="list_item_1_6">
fff
</a>
<div id="loadMore" class="LoadMore">Load more 1</div>
</div>
<div class="wadah" id="list_2">
<a href="" class="wadah__item" id="list_item_2_1">
2_a
</a>
<a href="" class="wadah__item" id="list_item_2_2">
2_b
</a>
<a href="" class="wadah__item" id="list_item_2_3">
2_c
</a>
<a href="" class="wadah__item" id="list_item_2_4">
2_d
</a>
<a href="" class="wadah__item" id="list_item_2_5">
2_e
</a>
<a href="" class="wadah__item" id="list_item_2_6">
2_f
</a>
<div id="loadMore" class="LoadMore">Load more 2</div>
</div>
javascipt код:
$(function () {
$(".wadah__item").slice(0, 2).slideDown().css('display', 'flex');
$(".LoadMore").on('click', function (e) {
e.preventDefault();
$(".wadah__item:hidden").slice(0, 2).slideDown().css('display', 'flex');
if ($(".wadah__item:hidden").length == 0) {
$(".LoadMore").fadeOut('slow');
}
$('html,body').animate({
scrollTop: $(this).offset().top
}, 2000);
});
});
Я хочу, чтобы при нажатии на каждую ссылку загружалось больше, тогда появляющийся элемент равен 2 из каждого раздела.
Демонстрационная ссылка:https://jsfiddle.net/mrcrabs/5g9uao73/13
Ответ №1:
Вам нужно отфильтровать wadah__item
элементы на основе выбранного элемента. Итак, получите родительский элемент выбранного элемента и найдите скрытые элементы внутри него. Чтобы получить первого 2
дочернего элемента, вы можете использовать :nth-child()
селектор псевдокласса с формулой -n 2
(выбирает 2-го и 1-го дочерних элементов).
$(function() {
$(".wadah .wadah__item:nth-child(-n 2)").slideDown().css('display', 'flex');
$(".LoadMore").on('click', function(e) {
e.preventDefault();
$(this).parent().find(".wadah__item:hidden").slice(0, 2).slideDown().css('display', 'flex');
if ($(this).parent().find(".wadah__item:hidden").length == 0) {
$(this).fadeOut('slow');
}
$('html,body').animate({
scrollTop: $(this).offset().top
}, 2000);
});
});
$(function() {
$(".wadah .wadah__item:nth-child(-n 2)").slideDown().css('display', 'flex');
$(".LoadMore").on('click', function(e) {
e.preventDefault();
$(this).parent().find(".wadah__item:hidden").slice(0, 2).slideDown().css('display', 'flex');
if ($(this).parent().find(".wadah__item:hidden").length == 0) {
$(this).fadeOut('slow');
}
$('html,body').animate({
scrollTop: $(this).offset().top
}, 2000);
});
});
.wadah {
margin: 30px 0;
}
.wadah__item {
border: 1px solid #ddd;
border-top: none;
padding: 1rem;
}
.wadah__item {
display: none;
}
#loadMore {
color: green;
cursor: pointer;
}
#loadMore:hover {
color: black;
}
#showLess {
color: red;
cursor: pointer;
display: none;
}
#showLess:hover {
color: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div class="wadah" id="list_1">
<a href="" class="wadah__item" id="list_item_1_1">
aaa
</a>
<a href="" class="wadah__item" id="list_item_1_2">
bbb
</a>
<a href="" class="wadah__item" id="list_item_1_3">
ccc
</a>
<a href="" class="wadah__item" id="list_item_1_4">
ddd
</a>
<a href="" class="wadah__item" id="list_item_1_5">
eee
</a>
<a href="" class="wadah__item" id="list_item_1_6">
fff
</a>
<div id="loadMore" class="LoadMore">Load more 1</div>
</div>
<div class="wadah" id="list_2">
<a href="" class="wadah__item" id="list_item_2_1">
2_a
</a>
<a href="" class="wadah__item" id="list_item_2_2">
2_b
</a>
<a href="" class="wadah__item" id="list_item_2_3">
2_c
</a>
<a href="" class="wadah__item" id="list_item_2_4">
2_d
</a>
<a href="" class="wadah__item" id="list_item_2_5">
2_e
</a>
<a href="" class="wadah__item" id="list_item_2_6">
2_f
</a>
<div id="loadMore" class="LoadMore">Load more 2</div>
</div>
</body>
</html>
ОБНОВЛЕНИЕ : Вы даже можете отобразить первые 2 элемента, используя CSS вместо кода jQuery.
.wadah .wadah__item:nth-child(-n 2){
display : flex;
}
$(function() {
$(".LoadMore").on('click', function(e) {
e.preventDefault();
$(this).parent().find(".wadah__item:hidden").slice(0, 2).slideDown().css('display', 'flex');
if ($(this).parent().find(".wadah__item:hidden").length == 0) {
$(this).fadeOut('slow');
}
$('html,body').animate({
scrollTop: $(this).offset().top
}, 2000);
});
});
.wadah {
margin: 30px 0;
}
.wadah__item {
border: 1px solid #ddd;
border-top: none;
padding: 1rem;
}
.wadah__item {
display: none;
}
#loadMore {
color: green;
cursor: pointer;
}
#loadMore:hover {
color: black;
}
#showLess {
color: red;
cursor: pointer;
display: none;
}
#showLess:hover {
color: black;
}
.wadah .wadah__item:nth-child(-n 2) {
display: flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div class="wadah" id="list_1">
<a href="" class="wadah__item" id="list_item_1_1">
aaa
</a>
<a href="" class="wadah__item" id="list_item_1_2">
bbb
</a>
<a href="" class="wadah__item" id="list_item_1_3">
ccc
</a>
<a href="" class="wadah__item" id="list_item_1_4">
ddd
</a>
<a href="" class="wadah__item" id="list_item_1_5">
eee
</a>
<a href="" class="wadah__item" id="list_item_1_6">
fff
</a>
<div id="loadMore" class="LoadMore">Load more 1</div>
</div>
<div class="wadah" id="list_2">
<a href="" class="wadah__item" id="list_item_2_1">
2_a
</a>
<a href="" class="wadah__item" id="list_item_2_2">
2_b
</a>
<a href="" class="wadah__item" id="list_item_2_3">
2_c
</a>
<a href="" class="wadah__item" id="list_item_2_4">
2_d
</a>
<a href="" class="wadah__item" id="list_item_2_5">
2_e
</a>
<a href="" class="wadah__item" id="list_item_2_6">
2_f
</a>
<div id="loadMore" class="LoadMore">Load more 2</div>
</div>
</body>
</html>
Ответ №2:
Вы можете использовать siblings()
и выбирать только из братьев и сестер нажатия кнопки
$(function () {
$(".wadah__item").slice(0, 2).slideDown().css('display', 'flex');
$(".LoadMore").on('click', function (e) {
e.preventDefault();
let sibs = $(this).siblings(".wadah__item:hidden");
sibs.slice(0, 2).slideDown().css('display', 'flex');
if (sibs.length == 0) {
$(this).fadeOut('slow');
}
$('html,body').animate({
scrollTop: $(this).offset().top
}, 2000);
});
});