【问题标题】:jQuery in Opera User JS Doesn't WorkOpera 用户 JS 中的 jQuery 不起作用
【发布时间】:2010-05-14 01:29:46
【问题描述】:

)。我正在玩一些 Opera User JS。我在我的用户 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 的能力。

我对这一切感到很困惑::- /。希望有人能给我一个线索::-)。

【问题讨论】:

    标签: javascript opera


    【解决方案1】:

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

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

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

    尝试使用显式的jQuery 函数而不是$ 快捷方式。

    在混合多个框架,甚至混合同一框架的两个副本/版本时,这些干扰很常见。从 jQuery 的角度来看,使用noConflict 可以减少但不能消除它的交互。就个人而言,对于像用户脚本这样的代码可能必须生活在不受我自己控制的各种上下文中,我会避​​免使用像 jQuery 这样的广泛框架。

    【讨论】:

    • 这确实是答案。非常感谢好心的先生! ::- ).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多