使用 jQuery 循环浏览导航菜单
相对(?)链接:
http://api.jquery.com/jQuery.each/
你好,
我得到了这个导航菜单,
<table>
<tr>
<td><div id="menuItem1" class="menuItem"><a href="http://www.w3schools.com">PORTFOLIO</a></div></td>
<td><div id="menuItem2" class="menuItem">ABOUT ME</div></td>
<td><div id="menuItem3" class="menuItem">CONTACT</div></td>
</tr>
<tr>
<td><div id="selectA1" class="selectA current"></div></td>
<td><div id="selectA2" class="selectA"></div></td>
<td><div id="selectA3" class="selectA"></div></td>
</tr>
</table>
selectA 类是一个矩形,当鼠标移到它上面时将选择菜单项,
长代码是喜欢
$("#menuItem1").mouseover(function () {
$("#selectA1").stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
$("#menuItem2").mouseover(function () {
$("#selectA2").stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
$("#menuItem3").mouseover(function () {
$("#selectA3").stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
$("#menuItem1").mouseout(function () {
$("#selectA1").stop().animate({opacity: 0},{ queue: false, duration: 400 });
});
$("#menuItem2").mouseout(function () {
$("#selectA2").stop().animate({opacity: 0},{ queue: false, duration: 400 });
});
$("#menuItem3").mouseout(function () {
$("#selectA3").stop().animate({opacity: 0},{ queue: false, duration: 400 });
});
,但我认为如果我循环这些菜单项,它可能会更短,
所以我尝试循环这些菜单项,以便矩形将出现在
我在 JavaScript 中尝试过的所有菜单项中,所有这些都不起作用
var i=1;
for (i=1;i<=3;i++) {
$("#menuItem"+i).mouseover(function () {
$("#selectA"+i).stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
}
,
var i=1;
while (i<=3) {
$("#menuItem"+i).mouseover(function () {
$("#selectA"+i).stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
感谢
$(".selectA").each(function (i) {
$("#menuItem"+i).mouseover(function () {
$("#selectA"+i).stop().animate({opacity: 1},{ queue: false, duration: 200 });
});
}
i++;
}
您的帮助
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,你最好使用
hover
而不是 < a href="http://api.jquery.com/mouseover/" rel="nofollow">鼠标悬停
/鼠标悬停
对。其次,您根本不需要使用
each
,您的.menuItem
和.selectA
元素之间有一个很好的简单关系:它们它们的id
属性中具有相同的后缀号。所以,你可以用这样简单的东西来完成整个事情:演示: http://jsfiddle.net/ambigously/ eza8b/
至于为什么 this:
does not work ,你遇到了一个典型的闭包问题。您提供给
.mouseover
的函数是对i
的闭包,因此它们最终都会使用i
所具有的最后一个值,该值是4;这意味着所有内部选择器最终都为$('selectA4')
并且没有引用任何有用的内容。如果你确实想使用循环,那么你可以在你希望使用 this:或 this:时强制对 i 进行求值:
First of all, you would be better off with
hover
rather than amouseover
/mouseout
pair.Secondly, you don't need to use
each
at all, there is a nice simple relationship between your.menuItem
and.selectA
elements: they have the same suffix number in theirid
attributes. So, you could do the whole thing with something simple like this:Demo: http://jsfiddle.net/ambiguous/eza8b/
As far as why this:
doesn't work goes, you're having a classic closure problem. The functions that you supply to
.mouseover
are closures overi
so all of them end up using the last value thati
had and that value is 4; that means that all of the inner selectors end up as$('selectA4')
and that doesn't refer to anything useful. If you really want to use a loop then you can forcei
to be evaluated when you want it to be with this:or this: