我正在創建一個小書籤,一切都很順利。我有一個函數,如果頁面沒有它,然後加載我的腳本或直接加載我的腳本,如果頁面有jQuery,則加載jQuery異步。我需要更新一個Bookmarklet的jQuery版本
然後我嘗試使用僅在jQuery 1.4.something中可用的委託函數。我可以檢查與$().jquery
jQuery版本,但後來如果我加載jQuery我有jQuery兩次,事件執行兩次。
有沒有辦法刪除先前加載的jQuery,然後加載我需要的新版本?
我正在創建一個小書籤,一切都很順利。我有一個函數,如果頁面沒有它,然後加載我的腳本或直接加載我的腳本,如果頁面有jQuery,則加載jQuery異步。我需要更新一個Bookmarklet的jQuery版本
然後我嘗試使用僅在jQuery 1.4.something中可用的委託函數。我可以檢查與$().jquery
jQuery版本,但後來如果我加載jQuery我有jQuery兩次,事件執行兩次。
有沒有辦法刪除先前加載的jQuery,然後加載我需要的新版本?
有,但你會打破這一頁,當你這樣做,所以我高度建議不要這樣做。要刪除的jQuery本身:
jQuery.noConflict(true);
這只是表明這是可以做到(儘管它不會刪除所有影響它有),你的情況我不會做這種,你'這樣做會真正打破你的書籤運行的網頁。
取而代之的是,如果您的小書籤需要最新的jQuery API,那麼後面的版本會適合您的所有需求嗎?如果是這樣,那就使用它,即使它效率稍低一點,所以它可以工作,無論頁面是否有稍舊的版本。
可以將jQuery移動到另一個名稱空間。
//Completely move jQuery to a new namespace in another object.
var dom = {};
dom.query = jQuery.noConflict(true);
這裏是另一個question一些稍微改動代碼,提問者能夠得到它的工作完全一樣使用你,一個書籤。
/* I have attempted to change the code to check for the 1.4.x and if its not then
load the latest version of jQUery. */
(function(){
var myBkl = {
jq: null,
loadScript: function(src) {
if(window.jQuery && window.jQuery.fn.jquery.indexOf('1.4') >= 0){
return;
}
var s = document.createElement('script');
s.setAttribute('src', src);
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);
},
whenLoaded: function(callback){
if (typeof(window.jQuery) !== 'undefined' && window.jQuery.fn.jquery.indexOf('1.4') >= 0) {
myBkl.jq = window.jQuery.noConflict(true);
callback(myBkl.jq);
}
else {
setTimeout((function() {myBkl.whenLoaded(callback); }), 100);
}
},
init: function($){
console.log($.fn.jquery);
console.log(window.jQuery.fn.jquery);
}
};
myBkl.loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'); //this will load the latest version from google cdn
myBkl.whenLoaded(myBkl.init);
})();
原文出處參考:Is it possible to load multiple different version of jQuery on the same page?
另一種選擇你,如果你必須有可能有(發現你不能沒有.delgate()
重寫你的書籤,如其他人所說後)做到這一點,同一頁面上的多個jQuery版本。看下面:
if (typeof jQuery == ‘undefined’) {
appendLatestJQuery();
}
else {
jQVersion = $().jquery;
versionArray = jQVersion.split(‘.’);
if (versionArray[1] < 4) {
appendLatestJQuery();
}
else {
runthis();
}
}
function appendLatestJQuery() {
var jQ = document.createElement('script');
jQ.type = 'text/javascript';
jQ.onload=runthis;
jQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
document.body.appendChild(jQ);
}
function runthis() {
var $j = jQuery.noConflict(true);
//now use $j for your code here
}
你不應該複製另一個答案,或者只是發佈另一個問題的鏈接*作爲你的答案。 – 2010-10-10 10:52:59
我不認爲我做過。我添加了我認爲需要改變的問題。仔細觀察。但在這種情況下最好的做法是什麼? – 2010-10-10 11:00:38
這個問題並不是要求轉移到另一個命名空間,而是你不包含作者需要的jQuery版本,1.3.2沒有委託......你剛纔複製了另一個答案,並且它仍然不回答這個問題。 – 2010-10-10 11:07:37
我會編輯,但我不完全確定,如果我只是想念你的建議的意圖:「**我不會這樣做**,你真的在做...「 – 2010-10-10 10:51:10
@大衛 - ...不知道我在那裏抽菸,謝謝!並更新:) – 2010-10-10 10:52:16
確實更有意義。我很高興我沒有編輯,因爲我確信這只是一個d-for-g的錯字。 =) – 2010-10-10 10:53:24