Katakanlah Anda akan melakukan penyertaan pada sejumlah besar halaman, dan di dalamnya termasuk Anda ingin melakukan beberapa hal spesifik jQuery. Halaman itu mungkin atau mungkin belum memuat jQuery. Jika sudah, Anda tidak ingin memuatnya lagi, tetapi jika belum, Anda melakukannya. Ini berhasil untuk itu.
Cara Cerdas Asinkron
// 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 );
Perhatikan bagaimana ada banyak tempat di mana kode jQuery yang ingin Anda jalankan dipanggil get. Jangan mengulangi diri Anda di sana, letakkan dalam fungsi yang dapat Anda panggil untuk memulai.
Kode ini diadaptasi dari sini.
Document.write way
Anak-anak keren tidak menggunakan document.write, tetapi jika Anda terlalu tua untuk peduli:
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();