Javascript 使用remove()从列表中删除某些项后显示相同的长度
假设我在一个无序列表中有一个包含3项的列表,如下所示Javascript 使用remove()从列表中删除某些项后显示相同的长度,javascript,jquery,Javascript,Jquery,假设我在一个无序列表中有一个包含3项的列表,如下所示 <ul class = "list"> <li>1</li> <li>2</li> <li>3</li> </ul> 然后在dom中,我可以看到最后一项被删除。但是如果我 alert(listitems.length); 它显示列表中有3个项目,尽管窗口中只显示了两个项目。javascript是否认为这些行为与此类似?如果是,请解释 li
<ul class = "list">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
然后在dom中,我可以看到最后一项被删除。但是如果我
alert(listitems.length);
它显示列表中有3个项目,尽管窗口中只显示了两个项目。javascript是否认为这些行为与此类似?如果是,请解释 listitems变量不是“活动的”——因为对于所有jQuery对象,它只记住DOM的状态,就像创建它时一样。@Ainitak是正确的。这样做:
var listitems = $('.list li');
listitems.eq(2).remove();
listitems = $('.list li');
console.log(listitems.length);
在页面加载时,您将
.list li
放入变量中,其原始值将分配给内存,除非您对其进行更新。您必须使用$('.list li')。长度或更新该变量:
var listitems=$('.list li');
等式(2).remove();
log($('.list li').length)代码>
- 一,
- 二,
- 三,
此时,listitems包含3项,因为dom中有3项。现在什么时候执行
等式(2).remove();此行从dom而不是从listitems中删除元素
预警前(listitems.length);您需要从dom获取li元素。将此行置于alert()之前
您必须使用$('.list li')再次访问列表项;它应该显示正确的长度。请添加解释。解释已经在另一个答案和评论部分中。问题仍然是jquery不更新变量,只更新“.remove()”调用上的DOM,因此应该再次访问DOM以获得正确的变量长度DOM@LalasMuathasim这将有助于$('.list li').eq(2).remove();log($('.list li').length);
var listitems = $('.list li');
listitems.eq(2).remove();
listitems = $('.list li');
console.log(listitems.length);
var listitems = $('.list li');
listitems = $('.list li');