使用remove()删除列表中的某些项后显示相同的长度

时间:2017-03-17 10:15:02

标签: javascript jquery

假设我在无序列表中有3个项目的列表,如下所示

<ul class = "list">
 <li>1</li>
 <li>2</li>
 <li>3</li>
</ul>

使用.remove()我可以删除第三个给定的

var listitems = $('.list li');
listitems.eq(2).remove();

然后在dom我可以看到最后一项被删除。但是如果我

alert(listitems.length);

它显示列表中有3个项目,尽管窗口中只显示了两个项目。 javascript是否会表现得像它?如果是,请解释。

4 个答案:

答案 0 :(得分:5)

listitems变量不是&#34;生活&#34; - 与所有jQuery对象一样,它只记住DOM的状态,就像你创建它时一样。

答案 1 :(得分:1)

您在页面加载时将.list li置于变量内,除非您更新,否则其原始值将分配给内存。您必须使用$('.list li').length或更新该变量:

var listitems = $('.list li');
listitems.eq(2).remove();
console.log($('.list li').length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class = "list">
 <li>1</li>
 <li>2</li>
 <li>3</li>
</ul>

答案 2 :(得分:0)

@Ainitak是对的。这样做:

var listitems = $('.list li');
listitems.eq(2).remove();
listitems = $('.list li');
console.log(listitems.length);

答案 3 :(得分:0)

var listitems = $('.list li'); 

此时listitems包含3个,因为dom中有3个项目。现在执行时 listitems.eq(2)卸下摆臂();这一行从dom中删除一个元素,而不是从listitems中删除。

警告前的

(listitems.length);你需要从dom获得li元素。将此行放在alert();

之前
listitems = $('.list li');