Sig, at du skulle lave en inkludering på en hel masse sider, og inde i den inkludere ville du lave nogle jQuery-specifikke ting. Denne side har jQuery måske eller måske ikke allerede indlæst. Hvis det allerede gør det, vil du ikke indlæse det igen, men hvis ikke, gør du det. Dette fungerer for det.
Smart asynkron måde
// Only do anything if jQuery isn't defined if (typeof jQuery == 'undefined') ( if (typeof $ == 'function') ( // warning, global var thisPageUsingOtherJSLibrary = true; ) function getScript(url, success) ( var script = document.createElement('script'); script.src = url; var head = document.getElementsByTagName('head')(0), done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() ( if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) ( done = true; // callback function provided as param success(); script.onload = script.onreadystatechange = null; head.removeChild(script); ); ); head.appendChild(script); ); getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', function() ( if (typeof jQuery=='undefined') ( // Super failsafe - still somehow failed… ) else ( // jQuery loaded! Make sure to use .noConflict just in case fancyCode(); if (thisPageUsingOtherJSLibrary) ( // Run your jQuery Code ) else ( // Use .noConflict(), then run your jQuery Code ) ) )); ) else ( // jQuery was already loaded // Run your jQuery Code );
Bemærk, hvordan der er flere steder, hvor jQuery-koden, du har til hensigt at køre, bliver kaldt. Gentag dig ikke der, sæt det i en funktion, du kan ringe til for at sparke tingene.
Denne kode blev tilpasset herfra.
Document.write måde
Hippe børn bruger ikke document.write, men hvis du er for gammel til at passe:
var jQueryScriptOutputted = false; function initJQuery() ( //if the jQuery object isn't available if (typeof(jQuery) == 'undefined') ( if (! jQueryScriptOutputted) ( //only output the script once… jQueryScriptOutputted = true; //output the script (load it from google api) document.write(""); ) setTimeout("initJQuery()", 50); ) else ( $(function() ( // do anything that needs to be done on document.ready // don't really need this dom ready thing if used in footer )); ) ) initJQuery();