Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从jQuery对象中永久删除元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何从jQuery对象中永久删除元素

Javascript 如何从jQuery对象中永久删除元素,javascript,jquery,html,Javascript,Jquery,Html,问题就在这里 我有这样的代码,将所有li元素放入jQuery集合,然后从DOM中删除最后一项。但我不知道如何从jQuery集合中删除元素 现在是这样的: console.log(myList); ['li.item', 'li.item', 'li.item'] 我需要弹出最后一个项目,并得到如下内容: console.log(myList); ['li.item', 'li.item'] var myList=$('.item'); console.log(myList); myLis

问题就在这里

我有这样的代码,将所有li元素放入jQuery集合,然后从DOM中删除最后一项。但我不知道如何从jQuery集合中删除元素

现在是这样的:

 console.log(myList);
['li.item', 'li.item', 'li.item']
我需要弹出最后一个项目,并得到如下内容:

console.log(myList);
['li.item', 'li.item']
var myList=$('.item');
console.log(myList);
myList.last().remove();
console.log(myList)


要删除jQuery对象中的元素,可以使用
.splice()

要删除最后一个元素,请执行以下操作:

myList.splice(-1);
要删除第一个元素,请执行以下操作:

myList.splice(0, 1);
重要的是要知道返回的值是一个HtmleElement。如果您想使用它做些什么,需要再次将其转换为jQuery元素


不幸的是,jQuery在默认情况下没有
pop
shift
。但您可以轻松地使用以下方法创建这些方法:

$.fn.pop = function(){
    return $(this.splice(-1));
}

$.fn.shift = function(){
    return $(this.splice(0,1));
}
然后打电话:

myList.pop();
myList.shift();

如果要在DOM和对象中删除,可以链接删除函数:

myList.pop().remove();
myList.shift().remove();
$(myList.splice(0, 1)).remove();
$(myList.splice(-1)).remove();
您可以使用从jQuery对象中选择特定的缓存项,但是更新原始缓存元素并不难。我使用
.not
函数从缓存的选择器中筛选出已删除的元素

说明:
var myList=$('.item');
console.log(myList);
myList=myList.not(myList.slice(-1.remove());
log(myList.css('color','red')

问题在于,从DOM中删除元素后,不会更新集合元素和
length
属性。当结果集合与实际DOM失去同步时。但是,您可以使用jQuery的
remove
方法和本机javascript
pop
splice
的组合。它可以非常简洁:

$([].pop.call(myList)).remove();
查看下面的演示

var myList=$('.item');
警报(myList.length);
$([].pop.call(myList)).remove()
警报(myList.length)


您只需使用该选择器创建一个新的jQuery对象,即可获得当前元素列表。使用splice或pop很容易。但是关于如何在收藏更新时删除物品的问题是一个有趣的问题。Brilliant+1,其他答案甚至不接近。@Vega因为我是“其他答案”的一部分,你能告诉我哪里错了吗?这将有助于我理解我的错误。@Karl AndréGagnon对不起,我不是在说我错了。这个答案比这里的其他答案(包括我的答案)更优雅。有人告诉我取消同步,因此,对于一个没有删除DOM元素的示例,我是否可以向集合(而不是实际的DOM元素)添加一些变量,以便稍后检索它?我对更新foreach循环中运行的集合/集合非常感兴趣,这样标记的项就不再通过each()运行了。
$([].pop.call(myList)).remove();