Javascript jquery remove()不起作用
我有以下清单Javascript jquery remove()不起作用,javascript,jquery,Javascript,Jquery,我有以下清单 <ul id="serial_list" class="list-group scroll"> <li class="list-group-item template">template</li> <li class="list-group-item">SNID</li> <li class="list-group-item">abc</li> <li clas
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
<li class="list-group-item">eee</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
</ul>
预期结果将是
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
</ul>
结果是预期的,但这会破坏性能
为什么这种方法不起作用
我很想删除return false
,因为如果列表中没有重复项,那么approach 1将起作用
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
<li class="list-group-item">eee</li>
<li class="list-group-item">fff</li>
<li class="list-group-item">ggg</li>
</ul>
在这种情况下,方法1将如我所期望的那样工作。在这种情况下,为什么返回false
不会出错
谢谢大家! 不能只是这样做:
$('#serial_list').find('li:not(.template)').remove();
而不是在数组中循环。因为您使用的是
$(item).remove()代码>您需要在下一次迭代中再次更新引用,因此方法1不起作用
你可以和我一起使用
删除返回false方法1中的代码>将根据需要输出。返回false
中断每个循环迭代
参考:
我们可以通过使
回调函数返回false。返回非false与
for循环中的continue语句;它将立即跳到下一个
迭代
把它取下来就可以了
代码:
演示:HTML
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
<li class="list-group-item">eee</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
</ul>
现场演示:
var number=[“SNID”、“abc”、“eee”、“SNID”、“abc”];
var$list=$('#serial_list')。find('li:not(.template');
$list.filter(函数(){
return(numbers.indexOf(this.innerHTML)>-1);
}).remove()代码>
- 模板
- SNID
- abc
- eee
- SNID
- abc
在each中需要一个each,因此它会找到多个值-approach 1会找到一个值,然后在使用$(item).remove()时继续执行
您需要在下一次迭代中再次更新引用,因此如果您正在寻找优化的解决方案,则方法1不起作用,请使用indexOf
。选中“我不想删除列表中的所有项目”。我只想删除数组中的元素。@user3378223 ohh我明白了。请看我的编辑。如果列表中没有重复项,那么方法1将按照我的预期工作。为什么return false
在这种情况下不会出错?因为除了return false之外,每个键只有一次出现,所以如果中断循环也没关系list
已经是jQuery对象,无需再次包装它
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
<li class="list-group-item">eee</li>
<li class="list-group-item">fff</li>
<li class="list-group-item">ggg</li>
</ul>
numbers = ["SNID", "abc", "eee", "fff", "ggg"];
// find each li
var list = $(serial_list).find('li:not(.template)');
numbers.forEach(function(number) {
$(list).each(function(index, item) {
// console.log(number);
if (number == $(item).html()) {
$(item).remove();
return false;
}
});
});
$('#serial_list').find('li:not(.template)').remove();
var list = $(serial_list).find('li:not(.template)');
list.filter(function(){
return numbers.indexOf($(item).html()) > -1;
//return $.inArray(numbers, $(item).html());
}).remove();
numbers.forEach(function (number) {
$(list).each(function (index, item) {
if (number == $(item).html()) {
$(item).remove();
}
});
});
<ul id="serial_list" class="list-group scroll">
<li class="list-group-item template">template</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
<li class="list-group-item">eee</li>
<li class="list-group-item">SNID</li>
<li class="list-group-item">abc</li>
</ul>
var numbers = ["SNID", "abc", "eee", "SNID", "abc"];
// find each li
var list = $('#serial_list').find('li:not(.template)');
list.each(function(index, elem) {
if (numbers.indexOf($(this).text()) != -1) {
$(this).remove();
}
});