最大调用堆栈超过jQuery $ .each()

时间:2012-09-04 02:42:43

标签: jquery

我正在尝试实现一个实时搜索过滤功能,并在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());
    });
});

非常感谢任何建议。

2 个答案:

答案 0 :(得分: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());
    });
});

答案 1 :(得分:1)

请改为:

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

递归发生在Sizzle的getText中 - 你正在迭代字符串字符本身,而不是选择器结果。在这种情况下,我认为以你认为的方式做到这一点没有任何好处,而且这看起来更规范(可能只是我的偏好)。