我是否可以取消对的所有JavaScript调用$

我是否可以取消对的所有JavaScript调用$,javascript,jquery,Javascript,Jquery,我需要在现有站点的scripts.js中使用一些脚本 这个网站已经在线很久了,我无法触摸脚本文件 我在另一页标准地包含它。脚本文件中有许多jQuery调用。我包含它的地方没有jQuery 我想作废所有$()类型的内容。我试过这个 $ = function() { }; 在我加入scripts.js之前,它似乎不起作用。我仍然会犯这样的错误 $(文档)未定义 有没有办法取消所有这些jQuery调用 谢谢试试看 window.$ = function(selector, context) {ale

我需要在现有站点的
scripts.js
中使用一些脚本

这个网站已经在线很久了,我无法触摸脚本文件

我在另一页标准地包含它。脚本文件中有许多jQuery调用。我包含它的地方没有jQuery

我想作废所有
$()
类型的内容。我试过这个

$ = function() { };
在我加入
scripts.js之前,它似乎不起作用。我仍然会犯这样的错误

$(文档)未定义

有没有办法取消所有这些jQuery调用

谢谢

试试看

window.$ = function(selector, context) {alert('eating the calls to $');}
在scripts.js文件之前包含的文件中。jquery中就是这样定义的,所以应该注意选择器语法

您可能需要定义其他覆盖来满足
$.method()
类型调用

window.$ = function(selector, context) {alert('eating the calls to $');}
在scripts.js文件之前包含的文件中。jquery中就是这样定义的,所以应该注意选择器语法


您可能需要定义其他覆盖以满足
$.method()
类型调用的需要,即使您确实能够使用它,您仍然会遇到问题,因为编写代码时假设存在jQuery。是的,您可以避免在以下行中出现
$为空或未定义
错误:

$('div.foo');
但仅仅写这一行是没有意义的:在返回的对象上总会有操作:

$('div.foo').html('blah');
在使用NOP jQuery函数之后,您将得到一个
“html”不是一个函数
错误,依此类推。唯一的方法是填写每个可能的jQuery方法的框架,确保每个方法在适当的时候返回自身


…或者只是正确地重写它…

即使您确实能够工作,您仍然会遇到问题,因为代码是在假设jQuery存在的情况下编写的。是的,您可以避免在以下行中出现
$为空或未定义
错误:

$('div.foo');
但仅仅写这一行是没有意义的:在返回的对象上总会有操作:

$('div.foo').html('blah');
在使用NOP jQuery函数之后,您将得到一个
“html”不是一个函数
错误,依此类推。唯一的方法是填写每个可能的jQuery方法的框架,确保每个方法在适当的时候返回自身


…或者只是正确地重写它…

好吧,
$(文档)
是未定义的,这并不奇怪,因为您没有从占位符函数返回值。因此,类似于
$(document).ready(function(){})自然会出错

基本上,如果我理解正确的话,您需要
$
成为一个不执行任何操作的函数,并返回另一个对象,其中调用任何成员函数都不执行任何操作。此外,调用$本身的成员函数(例如,
$.ajax()
)应该具有相同的行为

很遗憾,这是非标准的:

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的代码。

好吧,
$(document)
未定义也就不足为奇了,因为您没有从占位符函数返回值。因此,类似于
$(document).ready(function(){})自然会出错

基本上,如果我理解正确的话,您需要
$
成为一个不执行任何操作的函数,并返回另一个对象,其中调用任何成员函数都不执行任何操作。此外,调用$本身的成员函数(例如,
$.ajax()
)应该具有相同的行为

很遗憾,这是非标准的:

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的代码。

为什么不从
scripts.js
中复制您想要的东西,将其放在一个单独的文件中,并将其包括在内?@syntactical我想坚持干燥。有时您需要稍微弄湿。@Robert如果必须的话,我会。。。但是我想我会先找出其他的选择。如果你按照你的建议去做,那么你几个小时后进来的程序员就会明白你做了什么。你个人将永远被自己的把戏绊倒。哦,恐怖。恐怖。你为什么不把你想要的东西从
scripts.js
中复制出来,放在一个单独的文件中,并把它包括进去?@语法我想保持干燥。有时你需要弄湿一点。@Robert如果必须的话,我会。。。但是我想我会先找出其他的选择。如果你按照你的建议去做,那么你几个小时后进来的程序员就会明白你做了什么。你个人将永远被自己的把戏绊倒。哦,恐怖。恐怖。我想得越多,就越意识到挑选出我需要的几个函数就越容易。我想得越多,就越意识到挑选出我需要的几个函数就越容易。谢谢你的尝试,但我想我最终是在尝试一些非常愚蠢的事+谢谢你的努力。谢谢你试一试,但我想我最后是在尝试一些相当愚蠢的事情+感谢你的努力。谢谢,很有意思,但我确实选择了更理智的解决方案:)+1谢谢,很有意思,但我确实选择了更理智的解决方案:)+1