使多个按钮在 JavaScript 中隐藏和显示
Make multiple buttons hide and show in JavaScript
所以我有多个按钮,点击时会显示。但是如果单击另一个按钮,我很难隐藏内容。
Javascript代码看起来像这样
function portFunction() {
var e = document.getElementById("test2").style;
if(!e.display | e.display == "none"){
e.display = "block";
}
else{
e.display = "none";
}
}
和 html
<nav>
<ul>
<li onclick="portFunction();"><a href="#">Portfolio</a></li>
<li onclick="blogFunction();"><a href="#">Blog</a></li>
</ul>
</nav>
如果单击另一个按钮,它如何隐藏打开的最后一个按钮的内容并显示新按钮内容?
编辑片段代码,好的,所以如果你点击投资组合,将显示一些文本。但是,如果您单击博客,将显示其他一些文本,但仍会显示"投资组合"中的文本。我想要的是,如果您单击"投资组合"按钮,然后单击"博客"按钮,则投资组合中的文本应该消失。我希望每个按钮都有这个。
function blogFunction() {
var e = document.getElementById("test").style;
if(!e.display | e.display == "none"){
e.display = "block";
}
else{
e.display = "none";
}
}
function portFunction() {
var e = document.getElementById("test2").style;
if(!e.display | e.display == "none"){
e.display = "block";
}
else{
e.display = "none";
}
}
@import url(http://fonts.googleapis.com/css?family=Open+Sans);
.center{
font: 100% open sans, sans-serif;
margin:0;
padding:0;
}
#test{
display:none;
height:20%;
width:20%;
z-index:11;
position:absolute;
left:50%;
right: 50%;
}
.testText{
color:red;
z-index:11;
}
#test2{
display:none;
height:20%;
width:20%;
z-index:11;
position:absolute;
left:50%;
}
<nav>
<ul>
<li class="current"><a href="#">Home</a></li>
<li onclick="portFunction();"><a href="#">Portfolio</a></li>
<li onclick="blogFunction();"><a href="#">Blog</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Preview</a></li>
</ul>
</nav>
<div class="center">
<div id="test">
<h1 class="testText">
Test
</h1>
</div>
<div id="test2">
<h1 class="testText">
Test2
</h1>
</div>
</div>
一个更简单的方法是使用 classes
和 jQuery 的eq()
如下所示:
$('.section-link').click(function() {
var cur = $('.section-link').index($(this)); // get the index of the clicked link
$('.section-display').removeClass('active'); // hide all of the sections
$('.section-display').eq(cur).addClass('active'); // show the section at the same index of the clicked link
});
.section-display:not(.active) {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
<ul>
<li class="section-link"><a href="#">Portfolio</a>
</li>
<li class="section-link"><a href="#">Blog</a>
</li>
</ul>
</nav>
<br>
<br>
<div class="section-display active">Section One</div>
<div class="section-display">Section Two</div>
为了回应您的评论,让我们逐行获取代码:
首先,CSS
规则.section-display:not(.active) { display: none; }
隐藏每个具有类section-display
的元素,除非它也有类active
。这使得所有div 都隐藏,但如果您希望默认显示特定部分,则允许您添加类active
。
在jQuery中,$('.section-link').click(function() { });
是一个点击处理程序。基本上,它说当有人单击具有类section-link
的元素时,运行此块中的代码
在处理程序中,变量 $(this)
引用一个 jQuery 对象,该对象表示单击的元素(在本例中为链接(。
var cur = $('.section-link').index($(this));
说,第一行将所有具有类section-link
的元素(你们所有链接(收集到一个数组中,并给我单击的元素的index
。所以现在我们知道用户点击了第二个链接。
下一行$('.section-display').removeClass('active');
从具有类section-display
的所有div 中删除类active
,该类由于 css 规则而隐藏了所有div
在下一行$('.section-display').eq(cur).addClass('active');
,$('.section-display')
将所有具有类section-display
的div 收集到一个数组中(这些是包含内容的div(。之后,.eq(cur)
从与单击的链接位于同一索引的数组中选择div。 最后,由于 css 规则,.addClass('active')
将类active
添加到显示 4 元素的元素中。
所以现在,单击第一个section-link
元素将显示第一个section-display
div 并隐藏所有其他元素。单击第二个section-link
元素将显示第二个section-display
div并隐藏所有其他元素。等等...
我添加了一个callLastFunc((函数,它保存并调用了以前的函数,以隐藏以前的函数调用添加的内容。
var lastCalled = null;
function callLastFunc(arg) {
if (arg[0])
return;
if (lastCalled)
lastCalled("byCallPrev");
lastCalled = arg.callee;
}
function blogFunction() {
var e = document.getElementById("test").style;
if(!e.display | e.display == "none"){
e.display = "block";
}
else{
e.display = "none";
}
callLastFunc(arguments);
}
function portFunction() {
var e = document.getElementById("test2").style;
if(!e.display | e.display == "none"){
e.display = "block";
}
else{
e.display = "none";
}
callLastFunc(arguments);
}
@import url(http://fonts.googleapis.com/css?family=Open+Sans);
.center{
font: 100% open sans, sans-serif;
margin:0;
padding:0;
}
#test{
display:none;
height:20%;
width:20%;
z-index:11;
position:absolute;
left:50%;
right: 50%;
}
.testText{
color:red;
z-index:11;
}
#test2{
display:none;
height:20%;
width:20%;
z-index:11;
position:absolute;
left:50%;
}
<nav>
<ul>
<li class="current"><a href="#">Home</a></li>
<li onclick="portFunction();"><a href="#">Portfolio</a></li>
<li onclick="blogFunction();"><a href="#">Blog</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Preview</a></li>
</ul>
</nav>
<div class="center">
<div id="test">
<h1 class="testText">
Test
</h1>
</div>
<div id="test2">
<h1 class="testText">
Test2
</h1>
</div>
</div>
嗯,你最好使用框架,但这是你想要的吧?这个例子使用了vanillaJS框架,它非常强大,开箱即用;)
// lib.js
sitesContent = {};
// blog.js
sitesContent['blog'] = "Blog content"; // You can use templates like handlebars
// portfolio.js
sitesContent['portfolio'] = "Portfolio content"; // Better to use templates
// app.js
function navAction(site) {
document.getElementById('content').innerHTML = sitesContent[site];
}
navAction('portfolio'); // Means load portfolio when loaded first time
<nav>
<ul>
<li><a onclick="navAction('portfolio')" href="#">Portfolio</a></li>
<li><a onclick="navAction('blog')" href="#">Blog</a></li>
</ul>
</nav>
<div id="content"></div>
- 基于其他下拉菜单选择隐藏/显示下拉菜单
- 数据表-隐藏/显示列
- $scope变量,ng隐藏/显示
- 隐藏/显示包含单词的ul li项目.但只能入住李的子女
- JQuery隐藏/显示无法正常工作
- 隐藏/显示下面的分区根据是否选择某个选项进行选择
- 使用类而不是id在JavaScript中隐藏显示
- 我想隐藏/显示我的SVG元素,同时在anguarJS中使用它
- 隐藏/显示图像
- Javascript 中的表 - 隐藏/显示列
- 仅使用Javascript隐藏/显示元素,而不会弄乱DOM
- 隐藏/显示 js 代码不会在 IE8 或更低版本上运行
- Magento:根据所选国家/地区隐藏/显示输入字段
- 货到付款选择隐藏/显示付款方式
- "隐藏/显示”;元素和更改按钮背景图像
- Bootstrap Collapse.js切换菜单的隐藏/显示
- 如何隐藏/显示<面板>使用jquery
- 在php中隐藏/显示切换回声结果
- 如何使用jquery使2个按钮切换css,而只使用1个按钮.不显示隐藏/显示
- JQuery隐藏/显示不起作用