1

我正在使用 jQuery 从搜索字段中获取字符串并隐藏不匹配的项目。它遍历 div 列表并使用 $(this).fadeOut(); 隐藏这些元素。

这很好用,但我想在该搜索中添加进一步的搜索。我添加了一个额外的搜索字段,但当然它不会继承先前搜索的淡出,而是从头开始。

我需要一种方法来指定搜索只搜索列表的可见元素。这需要以相反的顺序工作,因为用户可能会在第二个搜索字段中输入,然后是第一个。

这是我的代码的 JSFiddle,说明了问题

JSFiddle 这里

以及一个搜索功能的代码片段

 $("#filter").keyup(function () { 
        var filter = $(this).val(),
        count = 0;
 $(".records2 div").each(function () {
 // If the list item does not contain the text phrase fade it out
        if ($(this).text().search(new RegExp(filter, "i")) < 0) {
            $(this).fadeOut();

            // Show the list item if the phrase matches and increase the count by 1
        } else {
            $(this).show();
            count++;
        }
  });
  });
4

1 回答 1

1

您可以使用:

element.is(":visible")

测试给定元素是否可见。

因此,在您的情况下,您只需执行以下操作:

if ($this).is(":visible")); {count++;}

或者您可以在选择器的末尾添加 ":visible" 以仅选择可见项目:

$(".someselector div:visible").each(...);

编辑:我刚刚检查了 jquery 文档。如果您这样做,您将获得更好的性能:

$(".someselector div").filter(":visible").each(...);

这是因为:visible它不是 CSS 规范的一部分,所以 jquery 必须手动实现它。

于 2013-03-19T11:43:01.057 回答