假设我在无序列表中有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是否会表现得像它?如果是,请解释。
答案 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');