0

我想知道是否可以将 eq() 与 filter() 一起使用。我已经对其进行了测试,但无济于事,尽管我找到了解决方法。我只是想知道万一我错过了什么。

我的例子是……假设您有几个带有列和行的表。

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

3 回答 3

1

filter()过滤已经选择的元素,您正在寻找的是find(),它在所选元素中查找元素,这实际上是正确的方法!

alert($(".menuTable").eq(0).find("td").length);
于 2012-12-08T22:33:48.810 回答
1

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

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

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

演示:jsfiddle

于 2012-12-08T22:34:46.237 回答
1

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

find确实是您应该在这里使用的。filter顾名思义,过滤元素的集合,在您的情况下,集合是所有.menuTable元素;该集合中没有tds。find另一方面寻找子元素,并且您的收藏确实td子元素。

于 2012-12-08T22:34:46.910 回答