Si at du skulle gjøre en inkludering på en hel rekke sider, og inne i den inkluderte du at du ville gjøre noen jQuery-spesifikke ting. Den siden kan eller ikke allerede har jQuery lastet inn. Hvis det allerede gjør det, vil du ikke laste det inn igjen, men hvis ikke, gjør du det. Dette fungerer for det.
Smart asynkron måte
// 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 );
Legg merke til hvordan det kalles jQuery-koden du har tenkt å kjøre. Ikke gjenta deg der, legg den i en funksjon du kan ringe for å sparke ting i gang.
Denne koden ble tilpasset herfra.
Document.write måte
Hippe barn bruker ikke document.write, men hvis du er for gammel til å bry deg:
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();