#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
Итак, на моем веб-сайте есть jQuery для отображения / скрытия div, когда я нажимаю на предыдущий и следующий логотип. Он отлично работает на первом div, но когда я хочу применить его ко второму div с тем же классом, это не сработало.
function updateItems(delta) {
var $items = $('.group').children();
var $current = $items.filter('.current');
$current = $current.length ? $current : $items.first();
var index = $current.index() delta;
// Range check the new index
index = (index < 0) ? 0 : ((index > $items.length) ? $items.length : index);
$current.removeClass('current');
$current = $items.eq(index).addClass('current');
// Hide/show the next/prev
//$(".prev").toggle(!$current.is($items.first()));
//$(".next").toggle(!$current.is($items.last()));
}
$(".next").click(function() {
updateItems(1);
});
$(".prev").click(function() {
updateItems(-1);
});
// Cause initial selection
updateItems(0);
.group div {
display: none;
}
.group div.current {
padding-top: 20px;
padding-left: 25px;
padding-right: 20px;
display: block;
border: 3px solid #caa461;
}
.next,
.prev {
float: right;
font-size: 2vw;
padding-top: 10px;
width: 90px;
height: 35px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90 nuLcSKlbmrPcLa0OT92xO1BIsZ ywDWZCvqsWgccV3gFoRBv0z 8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA 058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="col-lg-8 text-justify reveal group">
<div>
<p>First Div</p>
</div>
<i class="fas fa-angle-right" id="next"></i>
<i class="fas fa-angle-left" id="prev"></i>
</div>
<div class="col-lg-8 text-justify reveal group">
<div>
<p>Second Div</p>
</div>
<i class="fas fa-angle-right next"></i>
<i class="fas fa-angle-left prev"></i>
</div>
Ответ №1:
Попробуйте что-то вроде этого
Стрелки не знают, кому они принадлежат
У вас не было класса next / prev для второго набора стрелок
function updateItems(tgtDiv, delta) {
var $items = $(tgtDiv).children();
var $current = $items.filter('.current');
$current = $current.length ? $current : $items.first();
var index = $current.index() delta;
// Range check the new index
index = (index < 0) ? 0 : ((index > $items.length) ? $items.length : index);
$current.removeClass('current');
$current = $items.eq(index).addClass('current');
}
$(".next").click(function(e) {
updateItems(e.target.closest("div"), 1);
});
$(".prev").click(function(e) {
updateItems(e.target.closest("div"), -1);
});
// Cause initial selection
$(".group").each(function() {
updateItems(this, 0)
})
.group div {
display: none;
}
.group div.current {
padding-top: 20px;
padding-left: 25px;
padding-right: 20px;
display: block;
border: 3px solid #caa461;
}
.next,
.prev {
float: right;
font-size: 2vw;
padding-top: 10px;
width: 90px;
height: 35px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90 nuLcSKlbmrPcLa0OT92xO1BIsZ ywDWZCvqsWgccV3gFoRBv0z 8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA 058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="col-lg-8 text-justify reveal group">
<div>
<p>First Div</p>
</div>
<i class="fas fa-angle-right next"></i>
<i class="fas fa-angle-left prev"></i>
</div>
<hr/>
<div class="col-lg-8 text-justify reveal group">
<div>
<p>Second Div</p>
</div>
<i class="fas fa-angle-right next"></i>
<i class="fas fa-angle-left prev"></i>
</div>
Комментарии:
1. Здравствуйте, спасибо за ваш ответ, код действительно работал, но при первой загрузке сайта div 2 не был показан. Я должен нажать next и переместить его обратно, чтобы показать div. Можете ли вы помочь мне это исправить? и еще один, я продолжаю получать пустой div в and, я думаю, это потому, что следующий и предыдущий <i> тег определяются как div. Можете ли вы помочь мне избавиться и от этого? Спасибо перед
2.
$(".group").each(function() { updateItems(this,0) });
3. Большое вам спасибо, как насчет пустого div в конце, я это потому, что следующий и предыдущий тег <i> определяются как div. Можете ли вы помочь мне избавиться и от этого? Спасибо перед
4. Почему они должны рассматриваться как div?
5. Я изменил идентификатор на класс next / prev на стрелках