Ordre de queue prêt pour plusieurs documents jQuery

Je sais que les appels à $ (function () {}) dans jQuery sont exécutés dans l’ordre dans lequel ils ont été définis, mais je me demande si vous pouvez contrôler l’ordre de la queue?

Par exemple, est-il possible d’appeler “Hello World 2” avant “Hello World 1”:

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

La question est de savoir si c’est possible … Je sais déjà que cela va à l’encontre des meilleures pratiques;)

    Ces fonctions sont ajoutées à un tableau privé readyList , donc je dirais qu’il n’est pas accessible pour la manipulation.

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

    voici comment vous vous y prendriez:

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

    Vous pouvez en lire plus ici

    Vous pouvez utiliser la promesse jQuery pour réaliser quelque chose comme ceci.

    Voici un exemple où jQuery.ready.promise facilite la gestion de l’ordre d’exécution des blocs prêts pour le DOM:

    1. Dans l’exemple suivant, le premier bloc DOM Ready tente d’accéder à la hauteur de la div de test qui est ajoutée au corps dans un bloc DOM Ready ultérieur. Comme dans le violon, il ne l’obtient pas.

       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('
      '); });

      Fiddle: http://jsfiddle.net/geektantra/qSHec/

    2. Dans l’exemple suivant, il fait exactement la même chose que l’exemple avant d’utiliser jQuery.ready.promise. Comme dans le violon, cela fonctionne comme il se doit.

       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('
      '); });

      Fiddle: http://jsfiddle.net/geektantra/48bRT/

    Cela peut être fait, mais pas facilement. Vous devriez pirater jQuery lui-même, probablement ici . Avant que jQuery ne commence à appeler ces fonctions dans la boucle while, vous devez append du code pour inspecter le tableau readyList et réorganiser les éléments en fonction de vos préférences.