如何从jQuery设置中“popup”或“移位”

在Javascript中,数组应该有方法popup移位

但是,JQuery对象似乎缺less这些方法:

$('div').shift(); // Error, shift is undefined $('div').pop(); // Error, pop is undefined $('div').splice(); // Splice is OK actually 

我不知道为什么这些函数是缺less的 – 毕竟,jquery对象只是一个数组。

在jQuery对象上执行popup和移位function最简单的方法是什么?

他们失踪,因为一个jQuery对象不是一个数组。

 (function( $ ) { $.fn.pop = function() { var top = this.get(-1); this.splice(this.length-1,1); return top; }; $.fn.shift = function() { var bottom = this.get(0); this.splice(0,1); return bottom; }; })( jQuery ); 

编辑: .slice()不会修改原始对象。 修正了使用.splice()代替。

你最安全的select就是使用:

 [].pop.call($('div')) [].shift.call($('div')) 

如果你想在你的例子中使用确切的语法,你可以扩展jQuery.fn

 jQuery.fn.pop = [].pop; jQuery.fn.shift = [].shift; 

后者适用于增变器方法 。 它也适用于访问器和迭代方法,但是请注意,其中许多返回一个纯数组,你必须重新包装。 请注意,jQuery有自己的版本(如.map , .slice , .filter等),你可能不想覆盖。

这似乎适用于我:

 var divArray = $('div').toArray(); var elem = $( divArray.shift() ); 

.toArray()将DOM元素作为JavaScript数组返回,这可以按照预期使用。 然后,您只需将其转换回jQuery对象。

我意识到这个答案已经被选中了,但是这里有另外一个不太难记的select,以防你不必担心必须一直安装插件。

 $('div > :first').detach(); // shift $('div > :last').detach(); // pop 

顺便说一句,我意识到有使用性能问题:最后select器作为您的主要select器的一部分,所以你可能要考虑做这样的popup:

 $('div').children(':last').detach(); 
 var $firstDiv = $( $('div').splice(0, 1) ); 

另一种使用jQuery 1.9.1+

 $('div').first().remove(); $('div').last().remove();