0

非常简单的 JSFiddle 演示了问题(您需要查看调试控制台,因为console.log用于演示问题)。第二个 console.log 语句为空。但是,如果我el从以下行中删除,代码将起作用:

var items = $('li[data-level="2"]', el);

使它变成:

var items = $('li[data-level="2"]');

然后代码工作。谁能解释这是为什么?不知道为什么声明行el会丢失,它在 JSFiddle 中为我显示,但这是 JavaScript 面板中的所有代码:

$(document).ready(function() {
    var el = $('ul');
    var items = $('li[data-level="2"]', el);
    console.log(items);
    var visible = items.filter(':visible');
    console.log(visible);
});
4

1 回答 1

0

您将所有li元素设置为display:none,这就是el.filter(':visible')返回空集合的原因。我不确定我在这里看到了问题

jQuery 的$.filter方法将返回集合中与传递给过滤器的选择器匹配的所有项目。因此,如果我们要选择所有列表项和强项:

$("li, strong");

然后过滤它,使我们只有列表项:

$("li, strong").filter("li");

我们的结果只会是列表项。在您的情况下,您创建了一个无序列表,其中包含三个隐藏的列表项。您已经选择了所有这些,然后尝试过滤它们以仅查看那些是:visible,但是由于您将它们全部隐藏display:none在 CSS 中,因此结果集合将为空。

jQuery 按预期工作。

于 2012-05-07T19:13:14.377 回答