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);
});
答案 0 :(得分:0)
您已将所有li
个元素设置为display:none
,这就是el.filter(':visible')
返回空集合的原因。我不确定我在这里看到问题。
jQuery的$.filter
方法将返回集合中匹配传递给过滤器的选择器中的所有项目。因此,如果我们要选择所有列表项和强项:
$("li, strong");
然后过滤它,以便我们只有列表项:
$("li, strong").filter("li");
我们的结果只是列表项。在您的情况下,您创建了一个无序列表,充满了三个隐藏的列表项。您已经选择了所有这些,然后尝试过滤它们以仅查看:visible
的那些,但由于您在CSS中使用display:none
将它们全部隐藏起来,因此生成的集合将为空。
jQuery按预期工作。