我需要现有网站scripts.js
内的一些脚本。
此网站已上网多年,我无法触及脚本文件。
我将其标准地包含在另一页中。脚本文件中有许多jQuery调用。我包含它的地方没有jQuery。
我想取消所有$()
类型的内容。我试过这个......
$ = function() { };
在我加入scripts.js
之前它似乎没有用。我仍然遇到像
$(文件)未定义
有没有办法取消所有这些jQuery调用?
由于
答案 0 :(得分:2)
即使你确实这样做了,你仍然会遇到问题,因为代码是在假设存在jQuery的情况下编写的。是的,你可以在这样的行上避免$ is null or not defined
错误:
$('div.foo');
但只是写这一行没有意义:返回的对象总会有动作:
$('div.foo').html('blah');
在NOP jQuery函数之后,您将收到"html" is not a function
错误,依此类推。你可以做到的唯一方法是填写每个可能的jQuery方法的框架,确保每个方法在适当时返回自己。
...或者只是正确地重写它......
答案 1 :(得分:1)
尝试
window.$ = function(selector, context) {alert('eating the calls to $');}
您在scripts.js文件之前包含的文件中的。这是它在jquery中定义的方式,因此应该注意选择器语法。
您可能需要定义其他覆盖以满足$.method()
类型调用
答案 2 :(得分:1)
嗯,$(document)
未定义并不奇怪,因为您没有从占位符函数返回值。因此,$(document).ready(function(){});
之类的东西自然会出错。
基本上,如果我理解正确,你需要$
成为一个什么都不做的函数,并返回另一个调用任何成员函数什么都不做的对象。此外,$ self本身的成员函数(例如$.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的代码。