Opera用户JS中的jQuery不起作用

时间:2010-05-14 01:29:47

标签: javascript opera

)。我正在玩一些Opera User JS。我在我的User JS文件夹中包含了“1jquery.min.js”(前面有1个,因为Opera按字母顺序加载它们)。不幸的是,它似乎没有起作用。

window.onload = OnWindowLoad;

$(document).ready(function()
{
  alert ($('#area_19'));
});

function OnWindowLoad ()
{
  alert ($('#area_19'));
  alert(document.getElementById("area_19"));
}

这段代码的有趣之处在于前两个警报以NULL形式返回,但最后一个警报确实找到了该对象!所以元素肯定存在于页面中,但我的jQuery似乎无法得到它。更奇怪的是jQuery“ready”函数有效,表明我确实有jQuery功能。

我对这一切感到非常困惑:: - /。希望有人能给我一些线索:: - 。

1 个答案:

答案 0 :(得分:2)

我怀疑你在使用另一个JS框架的页面上运行脚本,可能是Prototype.js。

如果目标页面包含Prototype,它将覆盖您自己的$的jQuery副本,该副本通过ID获取元素,而不是选择器。由于没有标识为#area_19的元素(#不是ID中的有效字符),因此它将返回null。对于不存在的元素,jQuery永远不会返回null,你只会获得一个空的包装器对象。

$(document).ready()代码仍会执行,因为在包含Prototype之前调用了$并更改了$的行为。)

尝试使用显式jQuery功能而不是$快捷方式。

当混合多个框架,甚至混合同一框架的两个副本/版本时,这些类型的干扰是常见的。从jQuery的角度来看,使用noConflict可以减少但不能消除其相互作用。对于像用户脚本这样的代码,可能不得不生活在不受我自己控制的各种环境中,我会避​​免使用像jQuery这样的广泛框架。