如何从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();