我是否可以取消对的所有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