创建 jQuery 手风琴菜单的更好方法?
Better way of creating jQuery accordion menus?
我一直在努力学习 Javascript/jQuery 并试图通过在 this 页面上复制粘贴代码来构建手风琴菜单。但是,当我尝试制作多个 div 时,只有第一个有效。如果我将 ID 切换为 类,则当我单击时两个 div 都会扩展。这是我从 W3Schools 抓取的脚本;
$(document).ready(function(){
$(".flip").click(function(){
$(".panel").slideToggle("slow");
});
});
然后在 HTML 我有
<div class="flip">Category A</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
<div class="flip">Category B</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
以及 CSS -
#flip, #panel{
width: 350px;
text-align: center;
font-family: arial, sans-serif;
color: white;
font-size: 2em;
margin: 0 auto;
}
#flip{
height: 40px;
padding: 10px 0;
background-color: #cc44ff;
}
#panel{
display: none;
background-color: orange;
}
如果我复制函数和 类 并给它们新的名称,我已经设法让它工作,但它看起来很乱而且没有必要。有没有更清洁的方法来做到这一点?
我也将其发布到 JSFiddle - http://jsfiddle.net/Nikf/k1wstb5n/
Update Fiddle
将 id 更改为 class:
<body>
<div class="sidebar">
<div class="cat">
<div class="flip">Category A</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
</div>
<div class="cat">
<div class="flip">Category B</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
</div>
</div>
</body>
CSS:
*{
padding: 0;
margin: 0;
}
html{
height: 100%;
}
.sidebar{
width: 320px;
height: 100%;
background-color: ;
}
.flip, .panel{
width: 350px;
text-align: center;
font-family: arial, sans-serif;
color: white;
font-size: 2em;
margin: 0 auto;
}
.flip{
height: 40px;
padding: 10px 0;
background-color: #cc44ff;
}
.panel{
display: none;
background-color: orange;
}
并且通过使用 .cat
容器来存放物品只需使用这个 jquery:
$(document).ready(function(){
$(".flip").click(function(){
$(this).siblings('.panel').slideToggle("slow");
});
});
问题是 $(".panel")
解决了 所有 个匹配元素,而不仅仅是感兴趣的元素。
从单击的元素 this
开始,您可以 "traverse the DOM" 到 select 下一个 .panel
,忽略所有其他元素:
$(".flip").click(function() {
$(this).next(".panel").slideToggle("slow");
});
DEMO(使用问题中的 HTML 并适当调整 CSS)
我一直在努力学习 Javascript/jQuery 并试图通过在 this 页面上复制粘贴代码来构建手风琴菜单。但是,当我尝试制作多个 div 时,只有第一个有效。如果我将 ID 切换为 类,则当我单击时两个 div 都会扩展。这是我从 W3Schools 抓取的脚本;
$(document).ready(function(){
$(".flip").click(function(){
$(".panel").slideToggle("slow");
});
});
然后在 HTML 我有
<div class="flip">Category A</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
<div class="flip">Category B</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
以及 CSS -
#flip, #panel{
width: 350px;
text-align: center;
font-family: arial, sans-serif;
color: white;
font-size: 2em;
margin: 0 auto;
}
#flip{
height: 40px;
padding: 10px 0;
background-color: #cc44ff;
}
#panel{
display: none;
background-color: orange;
}
如果我复制函数和 类 并给它们新的名称,我已经设法让它工作,但它看起来很乱而且没有必要。有没有更清洁的方法来做到这一点?
我也将其发布到 JSFiddle - http://jsfiddle.net/Nikf/k1wstb5n/
Update Fiddle 将 id 更改为 class:
<body>
<div class="sidebar">
<div class="cat">
<div class="flip">Category A</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
</div>
<div class="cat">
<div class="flip">Category B</div>
<div class="panel">
One <br/>
Two <br/>
Three <br/>
Four <br/>
</div>
</div>
</div>
</body>
CSS:
*{
padding: 0;
margin: 0;
}
html{
height: 100%;
}
.sidebar{
width: 320px;
height: 100%;
background-color: ;
}
.flip, .panel{
width: 350px;
text-align: center;
font-family: arial, sans-serif;
color: white;
font-size: 2em;
margin: 0 auto;
}
.flip{
height: 40px;
padding: 10px 0;
background-color: #cc44ff;
}
.panel{
display: none;
background-color: orange;
}
并且通过使用 .cat
容器来存放物品只需使用这个 jquery:
$(document).ready(function(){
$(".flip").click(function(){
$(this).siblings('.panel').slideToggle("slow");
});
});
问题是 $(".panel")
解决了 所有 个匹配元素,而不仅仅是感兴趣的元素。
从单击的元素 this
开始,您可以 "traverse the DOM" 到 select 下一个 .panel
,忽略所有其他元素:
$(".flip").click(function() {
$(this).next(".panel").slideToggle("slow");
});
DEMO(使用问题中的 HTML 并适当调整 CSS)