2013-08-28 113 views
0

我有一個使用jQuery和強調以下(縮短陣列):jQuery每一個,我需要在這裏創建一個閉包?

var all_methods = ['locations', 'items', 'by-cocktails']; 
var to_methods = []; 
$.each(all_methods, (function (key, val) { 
    if ($('.lm-search-options[data-action=' + val + ']').hasClass('del')) { 
     console.log('to remove: ' + val); // <- only the last piece is moved out despite multiple pieces being here 
     to_methods = _.without(all_methods, val); 
    } 
})); 

我所看到的行爲是隻有最後選定的DOM元素被移除(是的,我知道這ISN」不會贏得任何軟件設計獎項)。例如,如果'locations'和'items'被刪除,只有'items'被刪除。我看到的行爲是由於這裏需要新的關閉?

+0

我想用[_.filter(http://underscorejs.org/#filter)是一個更好的解決方案 –

回答

1

嘗試

var $opts = $('.lm-search-options'); 
var to_methods = _.filter(all_methods, function(val){ 
    return !$opts.filter('[data-action=' + val + ']').hasClass('del') 
}) 
+0

哦,至少我能有點明白,原來答案:-) ;所以通過一系列元素進行過濾.... thx,讓我測試一下 – timpone

+0

@timpone這似乎是一個更好的答案 –

+0

好吧,有沒有什麼辦法可以告訴我我做錯了什麼我的原始 - 我需要關閉它才能工作。將使用你的答案,因爲它更短,但過去一週做了更多的JS,並且一些(好的,全部)閉包語法/語義正在引發循環。 – timpone

相關問題