2013-07-10 78 views
2

我想爲某個類傳遞多個對象的數字。這裏的一塊我想對在一個參數中傳遞多個參數的對象

group: function(number) { 
     for(var i=0;i<number.length;i++){ 
     groups=number[i]; 
    $('.group')[groups].remove(); 
    } 
    } 

工作,我想使它所以它就像

code.destroy.group(0,1,2); 

這將完成將刪除$('.group')[0]$('.group')[1]$('.group')[2]

我的預覽必須做到這一點錯誤,否則這將工作正常。有人能帶我走上正確的道路嗎?

感謝費利克斯·金領導我在正確的道路:

我不得不這樣做的是使用的參數參數

group: function() { 
    for(var i=0;i<arguments.length;i++){ 
     $('.sceditor-group')[arguments[i]].remove(); 
    } 
    } 
+0

我將看看這位菲利克斯,無論情況如何,你總是很高興地看到你,因爲你總是把我引向正確的道路。希望這是正確的道路。 – EasyBB

+0

@FelixKling如果你想添加一個答案,所以我可以upvote,這是一個巨大的幫助!非常感謝! – EasyBB

+0

我很高興我可以幫助:)只要upvote在其他問題的答案,如果它幫助你。 –

回答

1

您的邏輯存在問題,那就是因爲您在循環的每次迭代中刪除了匹配集的元素,所以不會刪除索引爲0,1的初始元素(在這種情況下你最終會刪除原始集合中的元素0,2 & 4)。另外,您在每次迭代時都會調用$('.group'),這不是最優的,而是如果利用緩存變量的優勢,然後逐個添加所需的元素,那麼您可以在結果集上調用remove。

您可以將您的功能更改爲:

group: function(number) { 
     var $current = $(); 
     var $group = $('.group'); 
     for(var i=0;i<number.length;i++){ 
     $current = $current.add($group.eq(number[i])); 
     } 
     $current.remove(); 
} 

編輯:考慮SLaks回答和arguments,而不是預期的陣列的使用,你可以做這樣的:

group: function() { 
     var $current = $(); 
     var $group = $('.group'); 
     for(var i=0;i<arguments.length;i++){ 
     $current = $current.add($group.eq(arguments[i])); 
     } 
     $current.remove(); 
} 
+0

我會用這個,所以基本上你說參數參數不好,然後 – EasyBB

+2

你也可以在循環之前選擇所有'.group'元素(而不是在循環中選擇它們)。然後你所要做的就是'$ current = $ current.add($ groups [arguments [i]]);' –

+1

@EasyBB我認爲'arguments'很好,看到我更新的答案... – DarkAjax

2

的jQuery對象是包含原始DOM元素陣列狀物體。

因此,$(...)[0]是一個原始的DOM元素,而不是一個jQuery對象。

要獲取特定元素的jQuery對象,請致電.eq()


編輯:你也在尋找特殊arguments陣列狀物體,它可以遍歷得到所有的傳遞給你的函數的參數。

+0

上述代碼適用於一個參數,但對於多個它不,所以我不得不在一些正確的道路上沒有。 – EasyBB

+0

@EasyBB:你是什麼意思? – SLaks

+0

@EasyBB:這聽起來像你實際上要求'arguments'變量。 – SLaks