2

问题发生在IE6(可能是所有浏览器预先约会document.getElementsByClassName)。 使用jQuery 1.6与1.5的原型document.getElementsByClassName打破原型覆盖造成的jQuery类选择器

<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

本质原型在浏览器中创建document.getElementsByClassName的早该功能(它本身是现在由大多数浏览器支持)。

然而,jQuery也检查document.getElementsByClassName的存在性,当它发现它时,它假定它获取本机实现;但实际上它获取的原型实现不像jQuery所期望的那样。

我尝试了很多技巧来解决这个问题,但都没有工作。 [想告诉jQuery的document.getElementsByClassName未定义,试图从自称document.getElementsByClassName等停止原型]

该应用程序是旧(旧因此原型),不幸的是将在IE6 &主要运行IE7(是的,FML )。我试图使用最新的jQuery,因为这是我很舒服,我需要添加很多疯狂的UI控件到应用程序 - 组合框自动完成dragdroppy疯狂....基本上我需要jQuery。

这里最终的结果是我得到的错误任何时候我使用jQuery的类选择 - $(”。SomeClass的)

有什么想法吗?我以为我用JavaScript很体面,但这是在杀我。

+1

你能展示一些你试过的代码吗,也许可以做一个小提琴吗? – Neal 2011-05-09 15:31:42

回答

0

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

我意识到你可能会支持你自己没有构建的应用程序,但我也会说,如果你将来有选择,不要选择一个框架,其他框架执行特征检测的能力。

伪装原生功能应该被认为是有害的。我在看你,原型。

1

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

+0

感谢这样一个简单的解决方案....这应该是真正接受 – sachinjain024 2015-02-17 07:11:28