我正在尝试创建一个简单的next和prev来显示和隐藏div。我正在使用bootstrap 4。
我正在使用.next()和.prev()在我的网站中制作slideshow
。
但现在我面临着多重问题。首先,当我点击下一步它跳过一个div时,然后当我点击prev时,div没有显示。
$(document).ready(function(){
$(".serviceparent .parentofparent").each(function(e) {
if (e != 0)
$(this).hide();
});
$("#nextservice").click(function(){
if ($(".serviceparent .parentofparent").next().length != 0)
{
$(".serviceparent .parentofparent").next().show().prev().hide();
}
else {
$(".serviceparent .parentofparent").hide();
$(".serviceparent .parentofparent").show();
}
return false;
});
$("#prevservice").click(function(){
if ($(".serviceparent .parentofparent").prev().length != 0)
$(".serviceparent .parentofparent").prev().show().next().hide();
else {
$(".serviceparent .parentofparent").hide();
$(".serviceparent .parentofparent").show();
}
return false;
});
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<div class="serviceparent row flex-row flex-nowrap text-center" style="white-space: nowrap">
<br><br><br>
<div id="div1" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-globe fa-5x"></i>
<div class="servicetitle">
<h2>Web Apps</h2>
</div>
</div>
</div>
<div id="div2" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-laptop fa-5x"></i>
<div class="servicetitle">
<h2>Desktop Apps</h2>
</div>
</div>
</div>
<div id="div3" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-signal fa-5x"></i>
<div class="servicetitle">
<h2>Networking</h2>
</div>
</div>
</div>
</div> <ul class="list-inline mx-auto justify-content-center servicenavparent">
<li id="prevservice" class="list-inline-item servicenav fa fa-arrow-left">PREV</li>
<li id="nextservice" class="list-inline-item servicenav fa fa-arrow-right">NEXT</li>
</ul>
所以,如何解决这个问题,我错过了什么?提前谢谢,抱歉我的英语不好。
答案 0 :(得分:1)
没有&#34;当前&#34; - 也就是说你想从转移到下一个。使用.serviceparent .parentofparent
您可以选择所有.parentofparent项目,并且show / hide会对所有项目执行操作,因此显示的最后一项将是最后一项(仅限&#39; s) 34;跳过1&#34;因为只有3 - 如果有4则会跳过2 ...)
在不改变太多代码的情况下,您可以将选择器更改为$(".serviceparent .parentofparent:visible")
(隐藏其他选项的第一个除外),以指示您希望下一个选择器在当前可见之后显示。
最后一个需要额外检查,以显示第一个。在这种情况下,您可以隐藏所有并显示第一个/最后一个:
$(".serviceparent .parentofparent:first").show();
使用.next()
/ .prev()
的一个问题是,您不会检查它是否提供了正确的项目。在您的html中,$(".parentofparent:first").prev()
会提供<br/>
- 因此您可以在.next / .prev中添加过滤器,仅提供您想要的类型,例如:
if ($(".serviceparent .parentofparent:visible").prev(".parentofparent").length != 0)
更新了代码段:
$(document).ready(function() {
$(".serviceparent .parentofparent").each(function(e) {
if (e != 0)
$(this).hide();
});
$("#nextservice").click(function() {
if ($(".serviceparent .parentofparent:visible").next(".parentofparent").length != 0) {
$(".serviceparent .parentofparent:visible").next().show().prev().hide();
} else {
$(".serviceparent .parentofparent").hide();
$(".serviceparent .parentofparent:first").show();
}
return false;
});
$("#prevservice").click(function() {
if ($(".serviceparent .parentofparent:visible").prev(".parentofparent").length != 0)
$(".serviceparent .parentofparent:visible").prev().show().next().hide();
else {
$(".serviceparent .parentofparent").hide();
$(".serviceparent .parentofparent:last").show();
}
return false;
});
});
&#13;
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<div class="serviceparent row flex-row flex-nowrap text-center" style="white-space: nowrap">
<br><br><br>
<div id="div1" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-globe fa-5x"></i>
<div class="servicetitle">
<h2>Web Apps</h2>
</div>
</div>
</div>
<div id="div2" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-laptop fa-5x"></i>
<div class="servicetitle">
<h2>Desktop Apps</h2>
</div>
</div>
</div>
<div id="div3" class="parentofparent col-12 col-sm-6 col-md col-lg">
<div class="servicecontainer">
<i class="fa fa-signal fa-5x"></i>
<div class="servicetitle">
<h2>Networking</h2>
</div>
</div>
</div>
</div>
<ul class="list-inline mx-auto justify-content-center servicenavparent">
<li id="prevservice" class="list-inline-item servicenav fa fa-arrow-left">PREV</li>
<li id="nextservice" class="list-inline-item servicenav fa fa-arrow-right">NEXT</li>
</ul>
&#13;
另一种方法是添加/删除类并使用它,例如:
$(".active").removeClass("active").next().addClass("active");
并通过css隐藏
.serviceparent .parentofparent { display:none; }
.active { display:block; }