两者jQuery.fn.dequeue和next函数都是简单的包装器jQuery.dequeue,在两个示例中传递相同的参数集。
(截至 jQuery 1.9.1 是最新的)
对于下一个函数参数:type是一个可选参数,表示队列,默认fx是jQuery的默认动画队列。element是一个 DOM 元素引用。
$.fn.dequeue:
dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
}
$().dequeue只需调用$.dequeue包含在 jQuery 对象中的每个元素。
您的用例$(this).dequeue()将使用最初引用的元素调用$.dequeue一次this。
类似地,next将传递一个对 的元素引用$.dequeue,它是队列出队的当前元素:
next = function() {
jQuery.dequeue( elem, type );
};
换句话说,这些本质上是相同的。next更直接一点,因为它没有迭代包装器,因此next()应该比$.fn.dequeue().
主要区别在于您可以调用.dequeue()多个元素,它将使每个元素出队,而next()直接与队列出队的元素相关联。
对于$(this).dequeue()回调内部的用例,这是无关紧要的。$.fn.dequeue在开始使一个或多个元素出队时很有用。$(this).dequeue()具有与 等效的结果next(),但在这种情况下,后者将提供微秒的增益。
正如@Explosion Pillsfx在评论中指出的那样,在处理非队列时还有一个特殊之处:
$(this).dequeue()没有type参数将使默认队列(fx)出队,因此非fx队列需要将名称作为参数传递给.dequeue(),同时.next()查找其创建范围的链并自动检索创建函数对象type的范围内。$.dequeue()next
因此,当使用非fx队列时,您必须将队列名称传递给$().dequeue(queueIdentifier),而.next()始终在回调所属的队列中出列。