2013-10-08 42 views
0

我正在使用主頁上的六個類似部分的應用程序。 我的應用程序工作,但我不得不重複下面的代碼塊:優化Javascript

唯一的每個實例不同的是ID:#grid和ID:作爲 這種IDS在每個六個部分的變化。

我試着使用通過線清理它:

var $grid = $('#grid4', '#grid2', '#grid3' .....), 

$close = $('#close', '#close2', '#close3', .....), 

以前防止部分加載在瀏覽器中。

這裏是正在重複的代碼塊:

$(function() { 

    var $grid = $('#grid'), 
     $name = $('.name'), 
     $close = $('#close'), 
     $loader = $('<div class="loader"><i></i><i></i><i></i><i></i><i></i><i></i><span>Loading...</span></div>').insertBefore($grid), 
     stapel = $grid.stapel({ 
     onLoad : function() { 
      $loader.remove(); 
     }, 
     onBeforeOpen : function(pileName) { 
      $name.html(pileName); 
     }, 
     onAfterOpen : function(pileName) { 
      $close.show(); 
     } 
     }); 

    $close.on('click', function() { 
     $close.hide(); 
     $name.empty(); 
     stapel.closePile(); 
    }); 

}); 

我怎樣才能提高代碼,所以我不必重複以前的塊? (記住,我確實需要保持不同的ID,因爲我需要每個部分獨立的行爲)

+0

@RobG認爲這是顯而易見的傾斜和解釋。我將編輯和添加問題。你可以撤消投票嗎? – irm

+0

- 不是我的投票,謝謝你添加一個問題。這個主題通常只是一個關注者,你應該試着在實際的文章中明確你想要達到的目標(就像你已經完成的那樣)。 「優化」對不同的人意味着不同的東西(更快,更少代碼,更易維護等)。我會給你+1的麻煩。 :-) – RobG

+0

@RobG我明白了。我會更具體。謝謝(: – irm

回答

0

您可以使用multiple-selector

var $grid = $('#grid4, #grid2, #grid3' .....) 
+0

我試試。在瀏覽器上加載:/ – irm

+0

Irm,注意函數調用中只有一個參數,在你的代碼中有幾個用逗號分開的參數,我認爲這是不正確的。 – Fernando

1

可以使用class代替id使common所有elements

$grid = $('.grid'), 

而且

$close = $('.close') 

HTML應該是這樣的,

<div class="grid"> 
    <!-- your html --> 
    <div class="close">Close</div> 
</div> 

現在closegrid class的孩子,你可以通過使用find()

+0

我需要每個部分獨立行爲,因此我需要不同的ID – irm

+0

@ir再次檢查我的答案我已經更新了 –

+0

使用類沒有這樣做,只有第一部分加載。 – irm

0

您可以使用變量來彌補選擇

for (var i=0; i<6; i++) { 
    $('#grid' + i)..... 
    // will be #grid0, #grid1, #grid2, etc 
} 
0
extract

創建一個數組並在其中循環。

var grid= ["#grid4","#grid2","#grid3"]; 
for (var i = 0; i < grid.length; i++) { 
    //The rest of your code goes here goes here 
} 
+0

這不會使代碼同時運行於所有ID嗎?它應該獨立運行用戶選擇的特定部分。 – irm

+0

@確定用戶選擇什麼?你從來沒有提到任何關於用戶選擇... – Thanos