使用带有filter()的eq()的Jquery Selector

时间:2012-12-08 22:31:11

标签: javascript jquery jquery-selectors filter

我想知道是否可以使用带有filter()的eq()。虽然我已经找到了解决办法,但我已经对它进行了测试但无济于事。我只是想知道我错过了什么。

我的例子就是这个...... 假设您有几个包含列和行的表。

<table class="menuTable"><tr><td>1</td><td>2</td></tr></table>
<table class="menuTable"><tr><td>3</td><td>4</td></tr></table>

我想知道每个表中有多少列空间,所以......

<script type="text/javascript">
alert($(".menuTable").eq(0).filter("td").length);
alert($(".menuTable").eq(1).filter("td").length);
</script>

这不起作用,我想找出原因。我最终使用.find()而不是.filter(),但我认为使用.filter()会更合适。

感谢您的任何意见。

经过几点评论后,我发现我的问题在于查找和过滤器之间的区别。还......对于那些好奇的人。我确实设法通过在选择器中包含eq来使用过滤器...

alert($(".menuTable:eq(0)").filter("td").length);

3 个答案:

答案 0 :(得分:1)

filter()过滤已选择的元素,您要查找的是find(),它会在所选元素中找到元素,而这实际上是正确的方法!< / p>

alert($(".menuTable").eq(0).find("td").length);

答案 1 :(得分:1)

您的意思是找出每个表中有多少列(不确定“列空格”的含义)?在这种情况下,您可以使用find

$(document).ready(function() {
    alert($(".menuTable").eq(0).find("td").length);
    alert($(".menuTable").eq(1).find("td").length);
});

如果你使用一个好的JavaScript调试器(比如在Chrome中)或登录到控制台,你可以看到$('.menuTable').eq(0)将返回匹配的第一个表。将filter应用于此是没有意义的 - 如果您使用find('td')然后想要根据类属性过滤td元素,则会有意义。

演示:jsfiddle

答案 2 :(得分:1)

  

我最终使用.find()而不是.filter(),但我认为它会   更适合使用.filter()。

find确实是你应该在这里使用的。 filter顾名思义,过滤元素集合,在您的情况下,集合是所有.menuTable个元素;该集合中没有td个。另一方面,find会查找子元素,而您的集合 会有td个子元素。