jQuery:有没有更好的方法来切换两个div?
我目前正在使用以下代码块在两个div之间切换。
$('.btn-my-projects').click(function(e) { $('.my-projects').show(); $('.all-projects').hide(); }); $('.btn-all-projects').click(function(e) { $('.my-projects').hide(); $('.all-projects').show(); });
显然它有效,但我想知道是否有更好的方法来做到这一点。 感觉它可以被压缩到一个处理程序而不是两个。 如果我使用委托我可以使它成为一个单一的处理程序,但它会变得更长,需要条件检查才能看到单击了哪个按钮。
简单:
function toggle(all) { $('.all-projects').toggle(all); $('.my-projects').toggle(!all); } $('.btn-my-projects').click(function() { toggle(false); }); $('.btn-all-projects').click(function() { toggle(true); });
如果你想得到更多的简洁:
function makeClickHandler(all) { return function () { $('.all-projects').toggle(all); $('.my-projects').toggle(!all); }; } $('.btn-my-projects').click(makeClickHandler(false)); $('.btn-all-projects').click(makeClickHandler(true));
或者,您可以采用完全不同的方法,并使用HTML5 data-*
属性将按钮显示和隐藏哪个div之间的链接放入标记中。 像这样的东西:
... ...
使用这样的JavaScript:
$('.project-control').on('click', function () { var showSelector = $(this).data('show'); $('.project').hide(); $(showSelector).show(); });
在实际页面中,您可能希望缓存所选元素。
您可以使用toggle()而不是show()和hide()。 然后你可以在.my-projects和.all-projects div中添加一个类.projects,然后只切换那个选择器。
你正在使用的方法就是我这样做的方法,但是如果你想要压缩,jquery的切换可能会对你有用http://api.jquery.com/toggle/
那么使用自定义属性呢?
HTML:
my-projects all-projects btn-my-projects btn-all-projects
和Javascript:
$('.toggler').click(function(e) { $($(this).attr('hide')).hide(); $($(this).attr('show')).show(); });