我需要 Javascript 闭包吗?
对于下面的额外代码,完成此任务的更好方法是什么。我需要关闭吗?如果需要,如何关闭?
我有一个左侧导航,鼠标悬停时我需要显示页面内容。我在 css 中有一个类 .first{visibility:visible;top:150px;}
这就是我用来完成此任务的类。
<script type="text/javascript">
$(function() {
var $items = $("#sidebar > ul >li")
$("#mainabout").addClass("first");
$(".about").mouseover(function() {
$("#mainabout").addClass("first");
$("#maineducation").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
//$("#main").css("background-image","url('revoliution2010_btbg.png')");
});
$(".education").mouseover(function() {
$("#maineducation").addClass("first");
$("#mainabout").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".experience").mouseover(function() {
$("#mainexperience").addClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".projects").mouseover(function() {
$("#mainprojects").addClass("first");
$("#mainexperience").removeClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".contact").mouseover(function() {
$("#maincontacts").addClass("first");
$("#mainprojects").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
});
})
</script>
我如何使这个jquery变小并进行优化,或者什么是更好的方法来做到这一点。
For the below extra code, what is the better way to accomplish this. Do I need closures and if yes how?
I have a left side navigation and on mouseover I need to display the page contents. I have in css a class .first{visibility:visible;top:150px;}
This is what I am using to accomplish this.
<script type="text/javascript">
$(function() {
var $items = $("#sidebar > ul >li")
$("#mainabout").addClass("first");
$(".about").mouseover(function() {
$("#mainabout").addClass("first");
$("#maineducation").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
//$("#main").css("background-image","url('revoliution2010_btbg.png')");
});
$(".education").mouseover(function() {
$("#maineducation").addClass("first");
$("#mainabout").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".experience").mouseover(function() {
$("#mainexperience").addClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
$("#mainprojects").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".projects").mouseover(function() {
$("#mainprojects").addClass("first");
$("#mainexperience").removeClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
$("#maincontacts").removeClass("first");
});
$(".contact").mouseover(function() {
$("#maincontacts").addClass("first");
$("#mainprojects").removeClass("first");
$("#mainexperience").removeClass("first");
$("#mainabout").removeClass("first");
$("#maineducation").removeClass("first");
});
})
</script>
How do I made this jquery small and optimized or what is the better way to do this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会选择:
您可以进一步抽象:
那么您的注册调用只是:
很小!
只需确保在定义
$items
的同一范围内定义regover
即可。这就是“闭包”的含义——函数引用外部作用域中的变量。例如:这样函数就可以“看到”
$items
变量。I'd go with:
You could abstract a step further with:
Then your registration calls are merely:
Tiny!
Just make sure you define
regover
in the same scope where$items
is defined. That's what it means to be a "closure" -- the function references variables in an outside scope. So for example:That way the function can "see" the
$items
variable.您可以编写一个函数来删除所有第一类。现在,在添加您需要的类之前调用此函数。
You could write a function, that removes all first classes. Now call this function before adding the one class you need.