我正在尝试一些事情,其中我尝试在网站上插入jquery,即http://www.tesco.com/wine。
出于某种原因,我无法访问jQuery,即使我能够成功地将新的脚本标记附加到body元素。此外,该页面似乎有一个window.$
函数,我尝试使用delete window.$
删除它。这对我来说似乎是假的。你怎么做一些不可取的东西?
以下是我用于将jQuery脚本附加到文档的代码:
var s = document.createElement('script');
s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
document.body.appendChild(s)
它正在其他页面上工作。
答案 0 :(得分:4)
在JavaScript聊天中讨论了这个问题,Tim Stone discovered页面上的JS添加了自己的Object.prototype.extend
实现 - 它打破了jQuery脚本。要修复它(但可能会破坏页面上的另一个脚本),您可以在添加jQuery之前删除它:
delete Object.prototype.extend;
var s = document.createElement('script');
s.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
document.body.appendChild(s)
$
已在该页面上定义,并带有以下函数声明:
function $(A){return document.getElementById(A)}
将document.getElementById()
与$()
别名并不鲜见 - 实际上,Firebug和WebKit的开发人员工具在其控制台中执行此操作。
它不可删除,因为它被声明为function
语句而不是对象属性。虽然delete
可能在某些浏览器中有效,但它不应该也不会在其他浏览器中使用。话虽这么说,我能够通过一个简单的赋值覆盖函数:
$ = function () {}
当jQuery加载时,它会创建jQuery
命名空间,并使用$
将此命名空间别名。因此,如果页面上的其他内容覆盖$
,您仍然可以使用jQuery()
。
答案 1 :(得分:1)
如果已定义$
,则可以始终使用jQuery
。