jQuery несколько документируют готовый порядок очереди

Я знаю, что вызовы к $ (функция () {}) в jQuery выполняются в порядке, что они определяются, но я задаюсь вопросом, можно ли управлять порядком очереди?

Например, это возможный назвать "Привет Мир 2" прежде "Привет Мир 1":

$(function(){ alert('Hello World 1') });
$(function(){ alert('Hello World 2') });

Вопрос состоит в том, возможно ли это... Я уже знаю, что это идет вразрез с лучшей практикой ;)

8
задан Derek Hunziker 13 August 2010 в 18:33
поделиться

3 ответа

Эти функции добавляются в приватный массив readyList, поэтому я бы сказал, что он недоступен для манипуляций.

http://github.com/jquery/jquery/blob/master/src/core.js#L47

3
ответ дан 5 December 2019 в 12:54
поделиться

Это можно сделать, но нелегко. Вам придется взломать сам jQuery, вероятно здесь . Прежде чем jQuery начнет вызывать эти функции внутри цикла while , вам нужно будет добавить код для проверки массива readyList и изменить порядок элементов в соответствии с вашими предпочтениями.

1
ответ дан 5 December 2019 в 12:54
поделиться

вот как бы вы это сделали:

// 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();

Вы можете узнать больше об этом здесь

7
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: