2010-11-04 41 views
2

我不知道這是可能的,但我要動態地創建多瓦爾,例如,這些都是我手動創建瓦爾,jQuery的循環來創建動態多瓦爾

var left_1 = $('.column-global.left .item-global').eq(0); 
var left_2 = $('.column-global.left .item-global').eq(1); 
var left_3 = $('.column-global.left .item-global').eq(2); 

但問題是我有時只需要兩個或一個變量。但三個是最大的。

所以我想傳遞一個參數成函數告訴代碼來創建2個或3瓦爾,

// I declare empty vars first 
var left_1; 
var left_2; 
var left_3; 

// get the number from somewhere, from the class for instnace 
var last_class = $(this).attr("class").split(' ').slice(-1); 

// loop the number with for loop 
for(var i = 1; i <= last_class; i++){ 
    left_1 = $('.column-global.left .item-global').eq(i-1); 
} 

,但你注意到我堅持 - 我怎麼能循環中的VAR {for}循環?

基本上我想要的for循環,以產生這樣的多個VARS(同上),

var left_1 = $('.column-global.left .item-global').eq(0); 
var left_2 = $('.column-global.left .item-global').eq(1); 
var left_3 = $('.column-global.left .item-global').eq(2); 

是有可能??

謝謝。

p.s.

一些答案在這裏提示一個數組,但我還有一個問題,進一步...

BCOS我還需要向增值經銷商進入該保持像這樣的父函數中的另一個功能,

another_function(left_1, left_2, left_3); 

所以我怎麼能實現這個數組?謝謝

+0

你有沒有理由不使用數組? – jelbourn 2010-11-04 14:52:28

+0

如何使用上述情況的數組?謝謝。 – laukok 2010-11-04 14:53:53

+0

jQuery對象(有效)是一個數組。將單獨包裝的元素存儲在數組中時,如果您已經將它們集中包裝在jQuery數組中,則沒有任何意義。 – user113716 2010-11-04 15:00:33

回答

1

爲什麼不使用數組?

var left = [] 

for(var i = 1; i <= last_class; i++){ 
    left[i] = $('.column-global.left .item-global').eq(i-1); 
} 

或者更可能的,因爲數組是從0開始的:

for(var i = 0; i < last_class; i++){ 
    left[i] = $('.column-global.left .item-global').eq(i); 
}i 
+0

好主意!謝謝。我會放手一搏!謝謝。 – laukok 2010-11-04 14:55:34

+0

對不起,我需要將這些變量傳遞給另一個函數,如 – laukok 2010-11-04 15:21:02

+0

loop_item(left_1,left_2,left_3);所以我怎麼能實現這個數組?謝謝 – laukok 2010-11-04 15:21:48

2

運行相同選擇3次,每次拉出你想要一個的項目代替,爲什麼不運行它一次並存儲該jQuery對象?

var $globals = $('.column-global.left .item-global') 

然後,您可以在需要時使用任何您需要的元素。

$globals.eq(1).doSomething(); 

,或者因爲jQuery對象是一個類似數組的對象,你可以通過索引獲得每個單獨的DOM元素,如:

$globals[1] // to get the actual non-jQuery wrapped DOM element 

編輯:關於更新在你的問題中,首先我會重寫該函數,如果可能的話接受1個jQuery對象。

如果這是不可能的,你只需要傳遞個別參數,我會做兩件事之一。

第一個想法。

如果可能的話,改變功能,以便它可以接受的DOM元素,然後將它們包裝功能:

var $globals = $('.column-global.left .item-global'); 

another_function.apply(this, $globals.get()); 

another_function(left_1, left_2, left_3) { 
     // Wrap the DOM elements 
    for(var i = 0, len = arguments.length; i < len; i++) { 
     arguments[ i ] = $(arguments[ i ]); 
    } 
    // ...the rest of the code 
} 

致電another_functionwith .apply(),你能傳遞的數組參數,這些參數將被分配給函數的各種參數。我們使用jQuery's .get() method來傳遞DOM元素數組。

第二個想法。

如果你絕對必須接受獨立包裝的DOM元素,做上述相同,但創建單獨包裝的元素像這樣的數組:

var $globals = $('.column-global.left .item-global').map(function() { 
    return $(this); 
}); 

another_function.apply(this, $globals.get()); 

這使用.map()創建的jQuery對象jQuery對象,然後使用.get()將數組拉出對象。

但是如果可能的話,我真的會改變你的another_function

+0

謝謝你。我正在處理您的建議。謝謝! :-) – laukok 2010-11-04 15:46:29

+0

@lauthiamkok - 不客氣。如果您有任何問題,請告訴我。 :o) – user113716 2010-11-04 16:02:42

+0

對不起,試圖使$ globals如你所建議的,但我仍然不知道如何讓它正確bcos我從父函數將許多不同的變量傳遞給其他函數。你可以在這裏看看我正在工作的功能 - http://www.jsfiddle.net/7huET/ – laukok 2010-11-04 16:02:45