我有以下jQuery语句工作正常,但我想知道它是否可以缩短,如果使它更简洁会加快性能?
奇怪的开始标记的原因是它是用于wordpress主题。
提前干杯!
jQuery(document).ready(function($) {
$(".sidebar ol#navigation li.work a").click(function() {
$("#content #second_nav").toggle("fast");
$("#content #second_nav ul.options_3").css('display','none');
$("#content #second_nav ul.options_2").css('display','none');
$("#content #second_nav ul.options_4").css('display','none');
$('.active_2').removeClass('active_2');
$('.active').removeClass('active');
$(this).toggleClass('selected');
});
$("#content #second_nav ul.options li a#work").click(function() {
$('.active').removeClass('active');
$(this).attr('class','active');
$("#content #second_nav ul.options_2").toggle("fast");
$("#content #second_nav ul.options_4").css('display','none');
$("#content #second_nav ul.options_3").css('display','none');
});
$("#content #second_nav ul.options li a#writing").click(function() {
$('.active').removeClass('active');
$(this).attr('class','active');
$("#content #second_nav ul.options_4").toggle("fast");
$("#content #second_nav ul.options_3").css('display','none');
$("#content #second_nav ul.options_2").css('display','none');
$('.active_2').removeClass('active_2');
});
$("#content #second_nav ul.options_2 li a#collage").click(function() {
$('.active_2').removeClass('active_2');
$('ul.options_3').css('display','none');
$(this).attr('class','active_2');
$("#content #second_nav ul.options_3#collage").toggle("fast");
});
$("#content #second_nav ul.options_2 li a#painting").click(function() {
$('.active_2').removeClass('active_2');
$('ul.options_3').css('display','none');
$(this).attr('class','active_2');
$("#content #second_nav ul.options_3#painting").toggle("fast");
});
$("#content #second_nav ul.options_2 li a#print").click(function() {
$('.active_2').removeClass('active_2');
$('ul.options_3').css('display','none');
$(this).attr('class','active_2');
$("#content #second_nav ul.options_3#print").toggle("fast");
});
$("#content #second_nav ul.options_2 li a#photo").click(function() {
$('.active_2').removeClass('active_2');
$('ul.options_3').css('display','none');
$(this).attr('class','active_2');
$("#content #second_nav ul.options_3#photo").toggle("fast");
});
});
答案 0 :(得分:5)
为了表现:
最好使用ID 和CLASSES,尽可能少选择节点。如果您使用ID,请不要指定标记。因此,$('#myId');
比$('a#myId');
快得多,因为它使用原生javascript getElementById()
。如果指定标记,则它会采用更复杂的选择策略。此外,ID应该在DOM中是唯一的,因此不是$("#content #second_nav ul.options_2 li a#photo")
使用$("#photo");
。越短,越快越好。
缓存您选择的DOM元素,如果您打算多次使用它们:
var secondNav= $("#content #second_nav");
secondNav.toggle("fast");
为简洁起见,如果选择器共享相同的操作,则可以在选择器中指定多个元素。例如:
var secondNav = $("#content #second_nav");
secondNav.toggle("fast");
$("ul.options_3, ul.options_2, ul.options_4",secondNav).hide();
$('.active_2').removeClass('active_2');
$('.active').removeClass('active');
$(this).toggleClass('selected');
希望这会有所帮助......
答案 1 :(得分:1)
有几件事要做。想到的最明显的一个是使用变量。
var $option2 = $("#content #second_nav ul.options_2");
var $option3 = $("#content #second_nav ul.options_3");
var $option4 = $("#content #second_nav ul.options_4");
然后,您可以将变量放在任何有长指示符的地方。
$option2.css('display', 'none');
$option3.css('display', 'none');
$option4.css('display', 'none');
应该有助于提高性能,可读性和重复性。
答案 2 :(得分:1)
$(“#content #second_nav ul.options_3”)。css('display','none'); $(“#content #second_nav ul.options_2”)。css('display','none');
== $(“#content #second_nav”)。find(“ul.options_3,ul.options_2”)。css('display','none');