提供上下文元素时,jquery过滤器不起作用

时间:2012-05-07 19:07:06

标签: jquery

Very simple JSFiddle demonstrates the problem(您需要查看调试控制台,因为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);
});

1 个答案:

答案 0 :(得分:0)

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

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

$("li, strong");

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

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

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

jQuery按预期工作。