2012-02-13 86 views
3

如何在符合特定條件的情況下從當前「elems」數組中取消設置當前元素?如何在迭代中「取消」元素

var elems = $('input, select, textarea', this); 

elems.each(function(){ 

    if($(this).attr('name') == 'something') { 
    // unset `this` from elems ?? 
    } 

}); 

我做了它的console.log,並沒有出現有鑰匙......

+0

請界定「未設置」。 – RedFilter 2012-02-13 14:30:59

+0

以及我的意思是從數組中刪除它,就像在PHP中未設置:) – Alex 2012-02-13 14:31:18

回答

5

可以使用filter()功能,構建那些從返回true的一個新的jQuery對象謂詞函數。

var elems = $('input, select, textarea', this); 

elems = elems.filter(function(){ 

    if($(this).attr('name') == 'something') { 
    return false; 
    } 

    return true; 

}); 

這當然可以成爲;

var elems = $('input, select, textarea', this).filter(function(){ 
    if($(this).attr('name') == 'something') { 
    return false; 
    } 

    return true; 
}); 

欲瞭解更多信息,請參閱filter() docs

+1

更改爲'返回$(this).attr('name')!='something'',它是完美的。 – gdoron 2012-02-13 16:58:53

3
elems.filter(function(){ 
    return $(this).attr('name') !== 'something'; 
}); 

,這將減少元素的name屬性的收集不是「東西」(換個說法:如果name屬性「東西」,該元素將被過濾掉)

6

你應當在初始選擇,而不是內做到這一點:

var elems = $('input, select, textarea', this).not('[name="something"]'); 
+0

這應該是正確的答案。 – MacMac 2012-02-13 14:39:58

+0

條件比我的例子複雜得多... – Alex 2012-02-13 14:40:50

+0

@Alex GIGO :)。 – RedFilter 2012-02-13 14:57:00