如何以更精简的方式编写jQuery代码?
How can I do this jQuery code in a more reduced way?
我有以下jQuery代码:
$('#menu .selected').removeClass('selected');
$('#homel').addClass('selected');
$('#home').slideDown(150, function() {
$('#public').slideUp(200);
$('#login').slideUp(200);
$('#faq').slideUp(200);
});
,你可以猜到,隐藏和显示div
框。在该示例中,#homel
是Home链接,#home
是Homediv。这看起来不错,但如果我想添加一个新框,例如,#register
,我必须在这里添加代码,并在每个其他框代码(#public
, #login
和#faq
)上添加代码:$('#register').slideUp(200);
有没有什么方法可以简化并使所有人都通用?
编辑:jsFiddle链接这里的例子
你可以给这三个元素一个类并使用它来操作它们("public", "login"answers"faq"元素),或者:
$('#public, #login, #faq').slideUp(200);
如果你给这些东西一个类那么你就会说
$('.slideMeUp').slideUp(200);
等等。如果您只想影响外部容器内的内容:
$('#home').slideDown(300, function() {
$(this).find('.slideMeUp').slideUp(200);
});
编辑本;啊,好吧,既然我看了你的加价,我就知道是怎么回事了。在这种情况下,我个人会使用"data-"属性将菜单中的<a>
元素与它们应该控制的页面部分关联起来。要做到这一点,菜单标签看起来像这样:
<a href="./#/home" class="menu-item selected" id="homel" data-section='home'>Home</a>
页面分段也应该有一个类:
<div id="home" class='menu-section'>
<h3>Welcome</h3>
</div>
现在,我不熟悉"路由"插件是如何工作的,但这应该使它更容易控制事情。如果你有一个菜单标签的引用,那么你可以用
获取它所控制的页面部分的"id"值。 var sectionId = $(menuItem).data('section');
然后你可以从所有的"。菜单部分"div",将"selected"添加到新选中的菜单中,然后将所有其他菜单向上滑动:
$('.content .menu-section:not(.selected)').slideUp(200);
这里有一个不同的解决方案。我给所有h3div一个共同的类,并选择他们与一个选择器。这样,您就不必每次添加另一个div时都更改代码。还有一个slideUp
函数。现在所有的路由都可以使用相同的函数,不需要大量的匿名函数。
这是最终结果;