IE6中出现问题(可能是所有浏览器都预先记录了document.getElementsByClassName)。 使用带有Prototype 1.5的jQuery 1.6
<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(请参阅第2篇文章)和此处:http://ejohn.org/blog/getelementsbyclassname-pre-prototype-16
基本上,Prototype在浏览器中创建了document.getElementsByClassName,该函数早于该功能(现在大多数浏览器本身都支持它)。
然而,jQuery还检查document.getElementsByClassName的存在,当它找到它时,它假定它正在获得本机实现;但实际上它的Prototypes实现并不像jQuery所期望的那样。
我尝试了很多技巧来解决这个问题,但都没有奏效。 [试图告诉jQuery document.getElementsByClassName未定义,尝试停止声明document.getElementsByClassName等原型。]
该应用程序是旧的(因此旧的原型),不幸的是,它将主要在IE6&amp; IE7(是的,FML)。我正在尝试使用最新的jQuery,因为那是我很舒服的地方,我需要在应用程序中添加许多疯狂的UI控件 - combobox autocomplete dragdroppy madness ....基本上我需要jQuery。
这里的最终结果是我在使用jQuery的类选择器的任何时候都会出错 - $('。someClass')
有什么想法吗?我认为我用javascript很不错,但这让我很难过。
答案 0 :(得分:1)
当调用没有任何标签的类选择器时,我遇到了同样的问题,例如$('.myClass')
$('div.myClass')
运作良好时导致错误。我将$('.myClass')
替换为$('*.myClass')
并开始工作
答案 1 :(得分:0)
这个答案可能看起来有点简单,但是,将原型更新到最新。他们放弃了那个糟糕的决定:http://www.prototypejs.org/api/utility/getElementsByClassName
我意识到你可能正在支持你自己没有构建的应用程序,但我也会说如果你将来可以选择,那么永远不要选择一个与其他框架功能相关的框架检测
伪造原生功能应被视为有害。我在看着你,原型。