document.getElementsByClassName breaking jQuery 类选择器由原型覆盖引起

document.getElementsByClassName breaking jQuery class selector caused by Prototype Override

本文关键字:原型 覆盖 选择器 getElementsByClassName breaking jQuery document      更新时间:2023-09-26

IE6 中出现问题(可能所有浏览器都早于 document.getElementsByClassName)。将 jQuery 1.6 与 Prototype 1.5 结合使用

<script src="../js/jquery-1.6.js" language="javascript" type="text/javascript"> </script>
<script language="javascript" type="text/javascript">
    // Prototype will claim the '$' namespace so give jQuery '$j' instead.
   $j = jQuery.noConflict();
</script>
<script src="../js/prototype.js" language="javascript" type="text/javascript"> </script>

这里讨论了这个问题:http://randomous.com/forum/topic.php?id=916(见第二篇文章)和这里:http://ejohn.org/blog/getelementsbyclassname-pre-prototype-16

本质上,Prototype在浏览器中创建document.getElementsByClassName早于该功能(现在大多数浏览器都本机支持它)。

然而,jQuery也会检查document.getElementsByClassName的存在,当它找到它时,它假设它正在获取本机实现;但实际上它正在获得Prototypes实现,它的行为不像jQuery所期望的那样。

我已经尝试了很多技巧来解决这个问题,但没有一个奏效。[试图告诉jQuery document.getElementsByClassName是未定义的,试图阻止原型声明document.getElementsByClassName等。

该应用程序很旧(因此是旧的原型),不幸的是,它将主要在IE6和IE7(是的,FML)上运行。 我正在尝试使用最新的 jQuery,因为那是我感到舒服的地方,我需要向应用程序添加许多疯狂的 UI 控件 - 组合框自动完成疯狂的拖拽......基本上我确实需要jQuery。

这里的最终结果是每当我使用 jQuery 的类选择器 - $('.someClass') 时我都会收到错误

这里有什么想法吗? 我以为我对javascript很不错,但这正在杀死我。

当调用没有任何标签的类选择器时,我遇到了同样的问题,例如 $('.myClass')导致错误,而$('div.myClass')运行良好。我用$('*.myClass')替换了$('.myClass'),它开始工作

这个答案可能看起来有点简单,但是,将原型更新到最新版本。他们放弃了这个可怕的决定:http://www.prototypejs.org/api/utility/getElementsByClassName

我意识到你可能正在支持一个你自己没有构建的应用程序,但我还要说,如果你将来可以选择,永远不要选择一个与其他框架进行功能检测的能力相差的框架。

伪造本机功能应被视为有害的。我在看着你,原型。