)。我正在玩一些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功能。
我对这一切感到非常困惑:: - /。希望有人能给我一些线索:: - 。
答案 0 :(得分:2)
我怀疑你在使用另一个JS框架的页面上运行脚本,可能是Prototype.js。
如果目标页面包含Prototype,它将覆盖您自己的$
的jQuery副本,该副本通过ID获取元素,而不是选择器。由于没有标识为#area_19
的元素(#
不是ID中的有效字符),因此它将返回null
。对于不存在的元素,jQuery永远不会返回null
,你只会获得一个空的包装器对象。
($(document).ready()
代码仍会执行,因为在包含Prototype之前调用了$
并更改了$
的行为。)
尝试使用显式jQuery
功能而不是$
快捷方式。
当混合多个框架,甚至混合同一框架的两个副本/版本时,这些类型的干扰是常见的。从jQuery的角度来看,使用noConflict可以减少但不能消除其相互作用。对于像用户脚本这样的代码,可能不得不生活在不受我自己控制的各种环境中,我会避免使用像jQuery这样的广泛框架。