5

给定列表

<ul>
    <li>aaa</li>
    <li>sss</li>
    <li>ddd</li>
</ul>

js代码:

$(document).ready( function () {

    $("ul li").each( function () {

          $("ul").empty();

          alert( $(this).text() );        

    });

});

此代码正常返回每个元素,为什么?为什么列表在第一次迭代时没有被清除?

4

2 回答 2

8

无序列表确实在您的第一次迭代中被清除,但列表项仍然由您创建的 jQuery 对象引用$("ul li")

它们可能不再是 DOM 的一部分,但它们仍然存在于内存中,您仍然可以访问和操作它们。

于 2013-03-25T11:21:52.993 回答
1

.each()函数创建了一个闭包:这就是闭包的全部意义所在。

当该行$("ul").empty();执行时,它会清除对列表的引用,但因为同一个列表也被 引用this,所以列表仍然存在,只是不再被引用$("ul li")

于 2013-03-25T11:24:32.937 回答