0

I am trying to understand how the filter works and wrote a small html code as follows

<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);

This results in a alert msg of 0 instead of the 1 I expect - jquery 1.44

Pointers please

4

4 回答 4

0

阅读手册:

将匹配元素集减少为匹配选择器或通过函数测试的元素。

选择器的匹配元素$('#btnContainer')仅是父元素,不包括任何子元素。如果要过滤输入,请使用:

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

此外,input元素是自动关闭的......

于 2012-08-31T19:09:03.830 回答
0

filter 方法通过输入到方法中的选择器减少匹配的元素集。您选择了一个项目 #btnContainer,然后尝试过滤此选择以查找 ID 为 #btnContinue 的元素。在您选择的一组元素中,没有 ID 为 #btnContinue 的元素,只有一个 ID 为 #btnContainer 的元素,这就是您收到 0 的原因。

正确使用过滤器方法是选择多个项目,例如一堆具有相同类名的 div,然后使用其他条件过滤您选择的 div。

此演示说明了过滤方法的正确使用:http: //jsfiddle.net/8AMYx/1/

查看 JQuery 文档以获取其他示例: http ://api.jquery.com/filter/

于 2012-08-31T19:09:27.707 回答
0

$('#btnContainer')匹配单个元素 - 您的第一个顶级 div。

.filter()将匹配的元素集减少到仅匹配新的辅助选择器的那些元素——在这种情况下#btnContinue。由于顶级 div 与 id-selector 不匹配#btnContinue,因此新匹配的集合为空。

如果您希望初始选择器匹配元素及其所有子元素,请执行以下操作:

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

然后你可以这样做:

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

修正代码演示

有关更多详细信息,请参阅 jQuery 文档.filter()

于 2012-08-31T19:09:29.780 回答
0

它返回 0 个项目,因为没有具有 id 的项目btnContainerbtnContinue

filter 会将结果集减少为仅与filter选择器匹配的项目。

你可能想要这个:$('#btnContainer input').filter('#btnContinue').length

于 2012-08-31T19:10:23.353 回答