【问题标题】:Jquery Selector using eq() with filter()使用 eq() 和 filter() 的 Jquery 选择器
【发布时间】:2012-11-26 18:47:43
【问题描述】:

我想知道是否可以将 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() 会更合适。

感谢您的任何意见。

在几次 cmet 之后,我意识到我的问题在于查找和过滤之间的区别。还有……对于那些好奇的人。我确实设法通过在选择器中包含 eq 来使用过滤器使其工作......

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

【问题讨论】:

    标签: javascript jquery jquery-selectors filter


    【解决方案1】:

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

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

    【讨论】:

    • 好的。我明白你在说什么。感谢您的解释。我现在明白了。
    【解决方案2】:

    filter()过滤已经选择的元素,你要找的是find(),它会在被选择的元素中找到元素,这实际上是正确的方法!

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

    【讨论】:

    • 这很有趣,因为我能够成功使用 eq(),但前提是我将它包含在语句中,例如:alert($(".menuTable:eq(0)").filter ("td").length);
    【解决方案3】:

    您的意思是找出每个表中有多少列(不确定“列空间”是什么意思)?在这种情况下,您可以使用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

    【讨论】:

    • 我指的是“td”空格。为什么没有意义?在那种情况下,我不明白过滤器和查找之间的区别。我认为过滤器减少了结果的数量。由于有两个表,我将其缩小,然后我想进一步过滤以仅找到 td。你能解释一下区别吗
    • $('table') 这样的jQuery 选择器会找到所有的表。如果您运行$('table').filter()filter 将在该组表上运行。您将使用filter 来获取与特定事物匹配的表,例如“有一个类 X”。您希望与表相关的表的子级为 table > tbody > tr > td。这开始有意义了吗?我试图弄清楚如何表达它。阅读jQuery entry for filter 是个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多