2

问题出现在 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 控件 - 组合框自动完成 Dragdroppy 疯狂......基本上我确实需要 jQuery。

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

这里有什么想法吗?我以为我对 javascript 很满意,但这让我很生气。

4

2 回答 2

1

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

于 2014-01-13T15:19:08.610 回答
0

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

而且我意识到您可能正在支持您自己没有构建的应用程序,但我还要说,如果您将来有选择权,请永远不要选择与其他框架进行特征检测的能力相结合的框架。

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

于 2011-10-25T12:29:25.650 回答