Я знаю, что вызовы к $ (функция () {}) в jQuery выполняются в порядке, что они определяются, но я задаюсь вопросом, можно ли управлять порядком очереди?
Например, это возможный назвать "Привет Мир 2" прежде "Привет Мир 1":
$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });
Вопрос состоит в том, возможно ли это... Я уже знаю, что это идет вразрез с лучшей практикой ;)
Эти функции добавляются в приватный массив readyList
, поэтому я бы сказал, что он недоступен для манипуляций.
Это можно сделать, но нелегко. Вам придется взломать сам jQuery, вероятно здесь . Прежде чем jQuery начнет вызывать эти функции внутри цикла while
, вам нужно будет добавить код для проверки массива readyList
и изменить порядок элементов в соответствии с вашими предпочтениями.
вот как бы вы это сделали:
// 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();
Вы можете узнать больше об этом здесь