1

I'm using jQuery to get a string from a search field and hide items that don't match. It loops through a list of divs and uses $(this).fadeOut(); to hide those elements.

This works very well, but I would like to add further searches within that search. I've added an extra search field, but of course it doesn't inherit the fade outs from the previous search and it starts again from the beginning.

I need a way to specify to the searches to only search visible elements of the list. This needs to work in reverse order as users might enter in the the second search field, then the first.

Here's a JSFiddle of my code illustrating the problem

JSFiddle Here

And a code snippet of one search function

 $("#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 に答える