2013-10-08 44 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