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将根据需要输出。

返回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();
    }
});