使jQuery语句更短

时间:2009-07-28 13:26:01

标签: jquery jquery-1.3 performance

我有以下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");
    });

}); 

3 个答案:

答案 0 :(得分:5)

为了表现:

  1. 最好使用ID 和CLASSES,尽可能少选择节点。如果您使用ID,请不要指定标记。因此,$('#myId');$('a#myId');快得多,因为它使用原生javascript getElementById()。如果指定标记,则它会采用更复杂的选择策略。此外,ID应该在DOM中是唯一的,因此不是$("#content #second_nav ul.options_2 li a#photo")使用$("#photo");。越短,越快越好。

  2. 缓存您选择的DOM元素,如果您打算多次使用它们:

    var secondNav= $("#content #second_nav");
    secondNav.toggle("fast");
    
  3. 为简洁起见,如果选择器共享相同的操作,则可以在选择器中指定多个元素。例如:

    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');
    
  4. 希望这会有所帮助......

答案 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');