Jquery 不能使用 3 个选择器
Jquery can't use 3 selectors
我正在编写一个小脚本来制作移动菜单。
但是,我无法让我的选择器一起工作。
当我只有$('#nav_button, .nav li, .nav li li')
#nav_button and .nav li
工作时,但是当我删除.nav li
并离开$('#nav_button, .nav li li')
时,这个子菜单也开始工作。我也尝试使用具有相同结果的$('#nav_button, .nav li, .sub_menu li li')
。
有人知道为什么吗?
jquery:
var mobileMenu = function () {
var currentPosition = 'closed'
$('#nav_button, .nav li, .nav li li').click(function() {
if (currentPosition == 'closed') {
$('.nav').addClass('open');
currentPosition = 'open';
}
else {
$('.nav').removeClass('open');
currentPosition = 'closed';
}
});
};
.html:
<div id="head">
<div class="container">
<div class="cover"></div>
<a href="#"><h1 class="logo pull-left">C<span class="logo_space">AV</span>O</h1>
</a> <!-- end logo !-->
<div id="nav_button"></div>
<ul class="nav pull-right">
<li><a href="#menu">Menu</a>
<ul class="sub_menu">
<li><a href="#">Starters</a></li>
<li><a href="#">Breakfast and Brunch</a></li>
<li><a href="#">Salads</a></li>
<li><a href="#">Sandwiches and Wraps</a></li>
<li><a href="#">Pasta</a></li>
<li><a href="#">Mains</a></li>
<li><a href="#">Pizza</a></li>
</ul>
</li>
<li><a href="#">About Us</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div><!-- end container !-->
</div> <!-- end header !-->
首先,您的两个选择器匹配相同的元素
$('#nav_button, .nav li, .nav li li')
.nav li
匹配.nav
内的任何 LI,包括嵌套的 LI
.nav li li
匹配内部.nav
与另一个 LI 中的任何 LI,即嵌套 LI
,.nav
内部的 LI 元素匹配两次,但这应该无关紧要,因为 jQuery 删除了重复项,但这是不必要的。
LI 时,会为嵌套的 LI 和父 LI 调用事件处理程序,因此单击处理程序执行两次,并且首先添加类,然后删除(反之亦然),因此没有可见的变化。
下面是一个简化的示例
小提琴
只是做
$('#nav_button, .nav li')
应该足够了,但您必须添加event.stopPropagation()
以确保在调用 LI 时事件不会传播到下一个父 LI,下面是一个示例
小提琴
$('#nav_button, .nav li').on('click', function(e) {
e.stopPropagation();
// do stuff
});
正如@adeneo在嵌套 li 函数中所说,将不必要地调用两次。我认为实现这一目标的另一种方法是将点击抓取器分为两个选择器,如下所示:
$('.nav').click(function() {
if (currentPosition == 'closed') {
alert('open');
$('.nav').addClass('open');
currentPosition = 'open';
}
else {
alert('close');
$(this).removeClass('open');
currentPosition = 'closed';
}
});
$('.nav > li > li').click(function() {
if (currentPosition == 'closed') {
alert('open');
$(this).addClass('open');
currentPosition = 'open';
}
else {
alert('close');
$('.nav').removeClass('open');
currentPosition = 'closed';
}
});
我写了一把小提琴来做你所期望的。请检查并评论是否有帮助。
http://jsfiddle.net/QMaster/y7d6osoq/
相关文章:
- 为什么$.fn.find()中的选择器不能引用当前$作用域之外的树?
- 日期选择器不能与新版本的angular-ui-bootstrap 2.2.0一起工作
- Jquery ID选择器不能与变量一起工作
- 选择器不能在jquery中工作
- jQuery选择器不能正常工作与下拉菜单
- Css选择器不能用于简单的jquery脚本
- Dropbox和Box选择器不能在默认的Chrome页面上工作
- jQuery缓存选择器不能正常工作
- jQuery多级选择器不能工作,但是.children可以
- jQuery选择器不能为动态创建的元素工作
- jQuery选择器不能在IE7和IE8中动态创建内容
- jquery id选择器不能在ie8中工作
- Selenium多重选择器不能定位元素
- 不知道为什么日期选择器小部件不能工作,也不知道为什么id选择器不能自动填充结果字段
- 日期选择器不能在safari和FireFox中工作
- 为什么这个选择器不能工作?JS
- 为什么这个选项选择器不能工作?
- jQuery颜色选择器不能在添加的元素上工作
- jQuery选择器不能在iframe内容上工作
- 为什么日期选择器不能在同一页面上的2个文本框上工作