1

リアルタイム検索フィルタリング関数を実装しようとしており、jQueryで$ .each()を使用しています。現在、各要素をループしてそのテキストを出力しようとしていますが、最大呼び出しスタック超過の問題が発生しています。リストは約50〜60アイテムなので、サイズはまったく問題ではないと思います。おそらく、そうは思いませんが、無限の再帰に遭遇していると思います。以下は私の関連するHTMLです。

<div id="brands">
    <ul id="left_brands">
        <li><a class="brand_check" href="javascript:void">Vineyard Vines</a></li>
        <li><a class="brand_check" href="javascript:void">Brooks Brothers</a></li>
        <li><a class="brand_check" href="javascript:void">Coast Apparel</a></li>
        <!-- etc. -->
    </ul>
</div>

そして、これが私にエラーを与えているjQueryコードです:

$("#brand_filter input").keyup(function() {
    $.each("#brands li a", function() {
        alert($(this).text());
    });
});

どんな提案でも大歓迎です。

4

2 に答える 2

2

コレクション反復子を使用する場合は、セレクター文字列ではなく、Jquery オブジェクトを反復処理する必要があります。

だから使うだけ

$("#brand_filter input").keyup(function() {
    $.each($("#brands li a"), function() {
        alert($(this).text());
    });
});

またはセレクター構文を使用する

$("#brand_filter input").keyup(function() {
    $("#brands li a").each(function() {
        alert($(this).text());
    });
});
于 2012-09-04T02:51:47.853 に答える
1

代わりにこれを行います:

$("#brand_filter input").keyup(function() {
    $("#brands li a").each(function() {
        alert($(this).text());
    });
});

再帰は Sizzle の getText 内で発生しています。セレクターの結果ではなく、文字列の文字自体を反復処理しています。この場合、あなたが思っていたようにやっても何のメリットもないと思います。

于 2012-09-04T02:49:47.403 に答える