2010-10-10 18 views
2

我正在創建一個小書籤,一切都很順利。我有一個函數,如果頁面沒有它,然後加載我的腳本或直接加載我的腳本,如果頁面有jQuery,則加載jQuery異步。我需要更新一個Bookmarklet的jQuery版本

然後我嘗試使用僅在jQuery 1.4.something中可用的委託函數。我可以檢查與$().jquery jQuery版本,但後來如果我加載jQuery我有jQuery兩次,事件執行兩次。

有沒有辦法刪除先前加載的jQuery,然後加載我需要的新版本?

回答

1

有,但你會打破這一頁,當你這樣做,所以我高度建議不要這樣做。要刪除的jQuery本身:

jQuery.noConflict(true); 

這只是表明這是可以做到(儘管它不會刪除所有影響它有),你的情況我不會做這種,你'這樣做會真正打破你的書籤運行的網頁。

取而代之的是,如果您的小書籤需要最新的jQuery API,那麼後面的版本會適合您的所有需求嗎?如果是這樣,那就使用它,即使它效率稍低一點,所以它可以工作,無論頁面是否有稍舊的版本。

+0

我會編輯,但我不完全確定,如果我只是想念你的建議的意圖:「**我不會這樣做**,你真的在​​做...「 – 2010-10-10 10:51:10

+1

@大衛 - ...不知道我在那裏抽菸,謝謝!並更新:) – 2010-10-10 10:52:16

+0

確實更有意義。我很高興我沒有編輯,因爲我確信這只是一個d-for-g的錯字。 =) – 2010-10-10 10:53:24

1

可以將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 

} 
+1

你不應該複製另一個答案,或者只是發佈另一個問題的鏈接*作爲你的答案。 – 2010-10-10 10:52:59

+0

我不認爲我做過。我添加了我認爲需要改變的問題。仔細觀察。但在這種情況下最好的做法是什麼? – 2010-10-10 11:00:38

+0

這個問題並不是要求轉移到另一個命名空間,而是你不包含作者需要的jQuery版本,1.3.2沒有委託......你剛纔複製了另一個答案,並且它仍然不回答這個問題。 – 2010-10-10 11:07:37

相關問題