我知道在 jQuery 中对 $(function(){ }) 的调用是按照它们定义的顺序执行的,但是我想知道你是否可以控制队列的顺序?
例如,是否可以在“Hello World 1”之前调用“Hello World 2”:
$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });
问题是它是否可能......我已经知道它违反了最佳实践;)
我知道在 jQuery 中对 $(function(){ }) 的调用是按照它们定义的顺序执行的,但是我想知道你是否可以控制队列的顺序?
例如,是否可以在“Hello World 1”之前调用“Hello World 2”:
$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });
问题是它是否可能......我已经知道它违反了最佳实践;)
以下是你将如何去做:
// lower priority value means function should be called first
var method_queue = new Array();
method_queue.push({
method : function()
{
alert('Hello World 1');
},
priority : 2
});
method_queue.push({
method : function()
{
alert('Hello World 2');
},
priority : 1
});
function sort_queue(a, b)
{
if( a.priority < b.priority ) return -1;
else if( a.priority == b.priority ) return 0;
else return 1;
}
function execute_queue()
{
method_queue.sort( sort_queue );
for( var i in method_queue ) method_queue[i].call( null );
}
// now all you have to do is
execute_queue();
你可以在这里阅读更多关于它的信息
这些函数被添加到一个私有数组readyList
中,所以我会说它无法进行操作。
您可以使用 jQuery Promise 来实现这样的目标。
以下是 jQuery.ready.promise 帮助管理 DOM 就绪块的执行顺序的示例:
在下面的示例中,第一个 DOM Ready 块尝试访问测试 div 的高度,该高度被附加到后面的 DOM Ready 块的主体中。就像在小提琴中一样,它无法得到它。
jQuery(function () {
var testDivHeight = jQuery("#test-div").outerHeight();
if(testDivHeight) {
alert("Height of test div is: "+testDivHeight);
} else {
alert("Sorry I cannot get the height of test div!");
}
});
jQuery(function () {
jQuery('body').append('<div style="background: #C00; height: 100px;" id="test-div"></div>');
});
小提琴:http: //jsfiddle.net/geektantra/qSHec/
在下面的示例中,它与使用 jQuery.ready.promise 之前的示例完全相同。就像在小提琴中一样,它可以根据需要工作。
jQuery(function () {
jQuery.ready.promise().done(function () {
var testDivHeight = jQuery("#test-div").outerHeight();
if(testDivHeight) {
alert("Height of test div is: "+testDivHeight);
} else {
alert("Sorry I cannot get the height of test div!");
}
});
});
jQuery(function () {
jQuery('body').append('<div style="background: #C00; height: 100px;" id="test-div"></div>');
});
小提琴:http: //jsfiddle.net/geektantra/48bRT/
可以做到,但不容易。你必须破解 jQuery 本身,可能在这里。在 jQuery 开始在while
循环中调用这些函数之前,您必须添加代码来检查readyList
数组并根据您的偏好重新排序元素。