2013-11-03 15 views
1

我正在嘗試用4種手風琴風格創建一個WordPress主題。我試着玩我的代碼來縮短它,但我沒有辦法做到這一點。有沒有辦法縮短這個?您的幫助將不勝感激!如何縮短我的多個手風琴風格的JQuery腳本?

jQuery(document).ready(function() { 
    var allPanels = jQuery('.accordion-style1 > dd').hide(); 
    jQuery('.accordion-style1 > dt > a').click(function() { 
     allPanels.slideUp(); 
     if(jQuery(this).parent().next().is(':hidden')) { 
      jQuery(this).parent().next().slideDown(); 
     } 
     return false; 
    }); 
}); 

jQuery(document).ready(function() { 
    var allPanels = jQuery('.accordion-style2 > dd').hide(); 
    jQuery('.accordion-style2 > dt > a').click(function() { 
     allPanels.slideUp(); 
     if(jQuery(this).parent().next().is(':hidden')) { 
      jQuery(this).parent().next().slideDown(); 
     } 
     return false; 
    }); 
}); 

jQuery(document).ready(function() { 
    var allPanels = jQuery('.accordion-style3 > dd').hide(); 
    jQuery('.accordion-style3 > dt > a').click(function() { 
     allPanels.slideUp(); 
     if(jQuery(this).parent().next().is(':hidden')) { 
      jQuery(this).parent().next().slideDown(); 
     } 
     return false; 
    }); 
}); 

jQuery(document).ready(function() { 
    var allPanels = jQuery('.accordion-style4 > dd').hide(); 
    jQuery('.accordion-style4 > dt > a').click(function() { 
     allPanels.slideUp(); 
     if(jQuery(this).parent().next().is(':hidden')) { 
      jQuery(this).parent().next().slideDown(); 
     } 
     return false; 
    }); 
}); 

http://jsfiddle.net/michellecantin/4mYdn/

+0

另外,如果你有興趣的性能,讀取CSS選擇器性能本教程:https://developer.mozilla.org/en-US/docs/Web/指南/ CSS/Writing_efficient_CSS 通常,將類直接應用於錨元素會更好,否則瀏覽器必須檢查頁面上的每個錨以查看其父節點。 –

回答

1

是否所有的功能,除了一個小的差別一樣嗎?這將是函數參數的作用:)

function accordion(i) { 
    var allPanels = jQuery('.accordion-style'+i+' > dd').hide(); 
    jQuery('.accordion-style'+i+' > dt > a').click(function() { 
     allPanels.slideUp(); 
     if(jQuery(this).parent().next().is(':hidden')) { 
      jQuery(this).parent().next().slideDown(); 
     } 
     return false; 
    }); 
} 

jQuery(document).ready(function(){ 
for(var i=1;i<=4;i++)accordion(i); 
}); 
+0

它的工作原理!謝謝:) –

+0

因此,每次添加新元素時,都需要更改腳本以適應新的元素數量?不是很聰明。確切地說, – melancia

2

取出數每類如<dl class="accordion-style">

var allPanels = jQuery('.accordion-style > dd').hide(); 
jQuery('.accordion-style > dt > a').on('click', function() { 
    jQuery(this).parents('.accordion-style').find('dd').slideUp(); 

    if (jQuery(this).parent().next().is(':hidden')) 
     { 
     jQuery(this).parent().next().slideDown(); 
     } 
    return false; 
}); 

的jsfiddle http://jsfiddle.net/code_snips/4mYdn/2/

,如果你不想改變類的名字,你可以做兩件事情

  1. <dl class="accordion-style accordion-style1 "> //類名前加上手風琴式

  2. 修改代碼

    var allPanels = jQuery('dl[class^=accordion-style] > dd').hide(); 
    jQuery('dl[class^=accordion-style] > dt > a').on('click', function() { 
        jQuery(this).parents('dl[class^=accordion-style]').find('dd').slideUp(); 
    
        if (jQuery(this).parent().next().is(':hidden')) { 
         jQuery(this).parent().next().slideDown(); 
        } 
        return false; 
    }); 
    

的jsfiddle http://jsfiddle.net/code_snips/4mYdn/9/

Attribute start with selector ^

+0

。課程不會被編號,因此他們可以識別特定的項目。 – MildlySerious

+0

我同意@MildlyInteresting,但是有些情況下開發人員無論出於何種原因都不能僅僅更改HTML標記。所以提出的解決方案應該適合那裏已經存在的東西,除非標記實際上是錯誤的。 – melancia