javascript - jQuery:文本切换应始终只显示一个文本
问题描述
我用 jQuery 编写了一个文本切换功能。一般来说,它有效。但是:始终应显示一个文本。一开始,它应该是第一个文本。如果单击第二个链接,则只应显示第二个文本,依此类推。
怎么可能编码呢?
$(".link").click(function() {
$(this).toggleClass("active-link");
var target = $($(this).data("target"));
target.toggleClass("show");
})
* {
margin: 0;
padding: 0;
font-size: 3vw;
}
.text {
margin-top: 20px;
display: none;
}
.show {
display: block;
}
.active-link {
text-decoration: underline;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="link show" data-target="#one">One</div>
<div class="link" data-target="#two">Two</div>
<div class="link" data-target="#three">Three</div>
<div class="text" id="one">This is One. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
<div class="text" id="two">This is Two. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div>
<div class="text" id="three">This is Three. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
将非常感谢您的帮助!祝你有美好的一天!<3
解决方案
你几乎拥有它!查看代码中的注释
$(".link").click(function() {
$(this).toggleClass("active-link");
$('.text').addClass("hide"); /* added this line */
$(".link").removeClass('active-link'); /* added this line */
$(this).addClass('active-link'); /* added this line */
var target = $($(this).data("target"));
target.removeClass("hide"); /* added this line */
target.addClass("show");
});
(function(){ // added this function
// this code will be run on page load and then never again
$('#one.text').addClass("show");
})(); // this is called IIFE. You could also just add the above line $('#one.text').addClass("show"); at the end of your javascript, but this is the nice way of doing it.
* {
margin: 0;
padding: 0;
font-size: 3vw;
}
.text {
margin-top: 20px;
display: none;
}
.show {
display: block;
}
.active-link {
text-decoration: underline;
}
/* added the next 2 rules */
.link {
cursor: pointer;
}
.hide {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="link active-link" data-target="#one">One</div>
<div class="link" data-target="#two">Two</div>
<div class="link" data-target="#three">Three</div>
<div class="text" id="one">This is One. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
<div class="text" id="two">This is Two. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div>
<div class="text" id="three">This is Three. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
推荐阅读
- python - 通过放大来增加数据
- python - 按计数使熊猫数据框组具有列名
- android - 未知的命令行选项“-skip”
- c++ - 为什么 Visual Studio 没有告诉我逻辑比较错误?
- android - 旋转的位图在每次旋转时都会失去质量
- reactjs - React / React Spring List Animate Out 不工作
- python - 从 pandas 系列列表中获取唯一值
- html - 如何约束div的纵横比
- node.js - Schema 不是构造函数 - Mongoose/Node
- javascript - 在打字稿中声明具有最小/最大长度的字符串类型