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 回答