2012-08-31 116 views
0

我想了解如何過濾工作,並寫了一個小的html代碼如下瞭解JQuery的篩選器屬性

<div id='btnContainer'> 
    <input type="button" id='btnContinue' value='Continue'> 
    </input> 
    <input type="button" id='btnCancel' value='Cancel'> 
    </input> 
</div> 


alert($('#btnContainer').filter('#btnContinue').length); 

這導致的0,而不是一個警報味精1我期望 - jquery 1.44

指針請

+1

'過濾器()'過濾掉不符合其參數的元素。 'id'選擇符根據定義是互斥的,所以'filter()'的這種用法將總是返回一個空集。 [指針](http://api.jquery.com/filter/)。 –

+1

這裏已經有很好的答案解釋了它爲什麼會起作用。我只想指出,如果你已經有一個元素的id(例如,btnContinue),並且你想選擇它,那麼你應該使用$('#btnContinue')來獲取它。由於沒有元素可以與另一個元素具有相同的id,因此在使用id選擇元素時,不需要使用.find()和.filter()等方法。 –

回答

0

閱讀說明書:

將匹配元素的集合減少爲與匹配選擇器匹配的元素集合或者通過函數的測試 。

您的選擇器$('#btnContainer')的匹配元素僅爲父級,其子級均未包含在內。如果你要過濾的輸入,使用方法:

alert($('#btnContainer').children().filter('#btnContinue').length); 

此外,input元素是自閉......

0

過濾方法減少了匹配的一套,由選擇要素的進入方法。您已選擇一個項目,#btnContainer,然後嘗試過濾此選擇以查找ID爲#btnContinue的元素。在您選擇的元素集中,沒有元素的ID爲#btnContinue,只有一個元素的ID爲#btnContainer,這就是您收到0的原因。

正確使用篩選器方法將選擇多個項目,例如一堆具有相同類名稱的div,然後使用其他條件過濾您選擇的div。

該演示示出了正確使用濾波器的方法:http://jsfiddle.net/8AMYx/1/

結帳jQuery的文檔對於其他例子: http://api.jquery.com/filter/

0

$('#btnContainer')單元相匹配 - 你的第一,頂層的div。

.filter()將匹配元素的集合減少爲僅匹配新的輔助選擇器的元素集合 - 在本例中爲#btnContinue。由於頂級div與id選擇器#btnContinue不匹配,因此新的匹配集爲空。

如果你希望你的最初選擇的元素和它所有的孩子,符合做:

var matchedSet = $('#btnContainer').find('*').andSelf(); 

然後,你可以這樣做:

alert(matchedSet.filter('#btnContinue').length); // == 1 

Demo of corrected code

見jQuery的文檔有關更多詳情,請致電.filter()

0

它返回0項,因爲有一個id btnContainerbtnContinue

過濾器沒有任何項目會減少結果集只有filter選擇匹配的項目。

你可能想這樣的:$('#btnContainer input').filter('#btnContinue').length