如何在display:none和display:block之间切换
How to toggle between display:none and display:block
响应式菜单
我有一个包含4个元素的导航菜单。其中一个不显示(display:none)。当你将窗口大小调整为700px时,导航菜单出现,其他3个元素被隐藏。当你点击"菜单"时,JQuery会选择所有隐藏的元素,并将它们显示为块元素。但是当你第二次点击"菜单"时,什么都没有发生。不知道如何修复JQuery代码。有人能帮忙吗?
HTML:<ul class="topnav">
<a href="javascript:void(0);" onclick="myFunction()"><li class="menu">Menu</li></a>
<li>test 1</li>
<li>test 2</li>
<li>test 3</li>
</ul>
CSS: .topnav {
max-width: 900px;
margin: 0 auto;
text-align: center;
}
.topnav li {
display: inline-block;
padding: 10px;
}
li.menu {
display: none;
}
@media screen and (max-width:700px) {
.topnav li {
display: none;
}
li.menu {
display: block;
}
}
JQuery: function myFunction() {
if($("ul.topnav li:hidden")) {
$("ul.topnav li:hidden").css("display", "block");
}
else {
$("ul.topnav li:not(:first-child)").css("display", "none");
}
}
在像$("ul.topnav li:hidden")
这样的表达式中传递一个选择器给jQuery, 总是返回一个jQuery对象。因此,
if($("ul.topnav li:hidden")) {
将总是成功,因为对象引用总是"真值"。如果你想测试选择器是否匹配任何元素:
if($("ul.topnav li:hidden").length) {
将检查长度是否为非零。
编辑和在评论我的回答指出,jQuery .toggle()
方法可能适合您的需要,使您的代码更简单,更短。
如果使用jQuery,则永远不需要使用属性事件处理程序。有几种方法可以达到你的目标。.toggle()
可能是最容易使用的方法。顺便说一句,我不明白你在<a>
里面有一个<li>
的布局,所以我重新安排了一些元素,所以它是有效的。
片段
$('.menu').on('click', function(e) {
e.preventDefault();
$('.topnav li').toggle();
});
.topnav {
max-width: 900px;
margin: 0 auto;
text-align: center;
}
.topnav li {
display: inline-block;
padding: 10px;
}
.menu {
display: none;
}
@media screen and (max-width: 700px) {
.topnav li {
display: none;
}
.menu {
display: block;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#/" class='menu'>Menu</a>
<ul class="topnav">
<li>test 1</li>
<li>test 2</li>
<li>test 3</li>
</ul>
首先,你不能将<a>
标签作为<ul>
的直接后代。
对于jQuery,更好的做法是使用 jQuery来挂钩点击事件,而不是使用内联onClick
处理程序。
最后,最好对父元素<ul>
应用一个类来控制它的子元素的显示属性,而不是对列表项应用内联样式。
重构代码:https://jsfiddle.net/00wdb9q6/1/
$('li.menu').on('click',function(){
$(this).parent().toggleClass('show-items');
});
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- display:none和将HTML元素的高度和宽度设置为0之间的区别是什么
- 我怎样才能在display:none和display:inline之间使用slideToggle
- JavaScript -在display:none和display:block之间添加过渡
- 如何在display:none和display:block之间切换
- style.visibility和style.display之间的区别