2010-05-11 46 views
0

我需要在現有網站的scripts.js中使用一些腳本。

此網站已上線了很長時間,我無法觸摸腳本文件。

我將其包含在另一個頁面中。腳本文件中有很多jQuery調用。我包含它的地方沒有jQuery。

我想廢除所有$()類型的東西。我試過這...

$ = function() { }; 

之前我包括scripts.js它似乎並沒有工作。我仍然得到錯誤,如

的$(document)是未定義

有沒有一種方法能夠排空所有這些jQuery的電話?

感謝

+0

你爲什麼不把你想要的東西從'scripts.js'中複製出來,放在一個單獨的文件中,並且包含它? – Syntactic 2010-05-11 02:29:01

+0

@句法我想堅持幹。 – alex 2010-05-11 02:30:02

+3

有時你需要稍微弄溼。 – 2010-05-11 02:31:05

回答

2

即使你得到那個工作,你仍然會有問題,因爲代碼與假設寫了jQuery的存在。是的,你可以避開上線$ is null or not defined象這樣的錯誤:

$('div.foo'); 

但是有在只是寫該行毫無意義:總是會有對返回的對象操作:

$('div.foo').html('blah'); 

後, NOP的jQuery功能,你會得到一個"html" is not a function錯誤,依此類推。你可以做的唯一方法就是填寫每一個可能的jQuery方法的骨架,確保每個方法在適當的時候自行返回。

...或者只是把它改寫正確...

+0

我越想到它,越是意識到它會更容易地挑出我需要的少數函數。 – alex 2010-05-11 02:55:04

1

嘗試

window.$ = function(selector, context) {alert('eating the calls to $');} 

在您的文件,你包括scripts.js中文件之前。這是它在jQuery中的定義,所以應該照顧選擇器的語法。

您可能需要定義其他替代來迎合$.method()呼叫類型壽

+0

感謝您的光臨,但我認爲我最終嘗試了一些非常愚蠢的事情。無論如何,你的努力+1。 – alex 2010-05-11 03:01:29

+2

將「選擇器」和「上下文」添加到參數列表中是毫無意義的...... – James 2010-05-11 07:37:42

1

嗯,這是毫不奇怪,$(document)是不確定的,因爲你不返回從您的佔位符函數的值。因此,像$(document).ready(function(){});這樣的東西自然會出錯。

基本上,如果我理解正確,你需要$是一個什麼都不做的函數,並且在調用任何成員函數時不返回任何對象。而且,$本身的調用成員函數(例如$.ajax())應該具有相同的行爲。

你可以用__noSuchMethod__做到這一點,這是不幸的是非標準:

window.$ = function() 
{ 
    var doNothingObj = new (function() 
    { 
     this.__noSuchMethod__ = function() 
     { 
      return doNothingObj; 
     } 
    })(); 
    return doNothingObj; 
}; 
window.$.__noSuchMethod__ = window.$; 

這將允許任意鏈:

$(document).ready(function(){}); 
$("#foo").animate().animate(); 
$.ajax({ url: "file.html"}); 

當然,一個更加健壯解決方案是重構使用jQuery的代碼。

+0

謝謝,有趣的,但我確實去了更安全的解決方案:) +1 – alex 2010-05-11 03:19:27

相關問題