我想知道是否可以使用带有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);
答案 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
个子元素。