我经常花10-20分钟查看jQuery片段,以找到一种缩短代码的方法。
现在这段代码我已经看了一遍又一遍,但我只是想知道人们会如何重构它,或者他们是否真的会这样做。
$("#tabs ul li").first().addClass("activeTab");
$("#tabs div").hide().first().show();
$("#tabs ul li a").click(function(){
$("#tabs div").hide();
$("#tabs").find($(this).attr('href')).show();
});这更多的是一个好奇心的问题,而不是求救,因为我正在努力提高我的jQuery编程技能。
/*编辑
连接链路的jsFiddle
你所有精彩建议的最终结果是。
var $c = $("#tabs"), $t = $c.find("li"), $d = $c.find("div");
$d.not(":first").hide();
$t.find("a").click(function() {
$d.hide().filter($(this).attr('href')).show();
}).closest("li").first().addClass("activeTab");发布于 2012-11-26 21:51:04
我将按如下方式重构它。不需要每次都创建jQuery对象,对它进行引用以备将来使用。
var $tabs = $("#tabs");
$tabs.find("li:first").addClass("activeTab");
$tabs.find('div').not(':first').hide();
$tabs.find("a").click(function() {
$("#tabs div").hide().filter($(this).attr('href')).show();
})发布于 2012-11-26 21:53:09
我会重构选择器,因此遍历Dom的成本会更低。它应该是这样的:
var $tabsControl = $("#tabs"),
$tabs = $tabsControl.find("ul > li"),
$tabsContent = $tabsControl.find("div");
$tabs.first().addClass("activeTab");
$tabsContent.hide().first().show();
$tabs.find("a").click(function() {
$tabsContent.hide();
$tabsControl.find($(this).attr("href")).show();
});发布于 2012-11-26 21:50:34
我个人认为这段代码还可以,但重构$("#tabs div").hide().first().show();只是为了使它更具可读性,也许是:
$("#tabs div").not(":first").hide();https://stackoverflow.com/questions/13566061
复制相似问题