在元素上调用detach()后,jQuery集合对象的长度不会改变

时间:2016-03-09 17:48:31

标签: javascript jquery

这似乎非常简单但我无法理解为什么它不起作用。

$('.some-containers').each(function () {

    var $ul = $(this).find('ul');

    var $items = $ul.find('li'); 
    console.log($items.length); //5

    if ($items.length > 2) {
        var $last = $items.last().detach();
        console.log($items.length); //still 5
    }

}

我的问题是,为什么在删除或分离最后一项后,还有最后一项?

1 个答案:

答案 0 :(得分:4)

detach()视为DOM中元素集合的副本,而不是引用。 $items对DOM进行操作,并从DOM中删除指定的元素。

再次将$items = $ul.find('li'); 重新分配给该集合:

$ul.find('li').length

或只做{{1}},长度将反映实际值。

示例(感谢@MartinGottweis):https://jsfiddle.net/j7hqnhb3/