document.getElementsByClassName breaking jQuery 类选择器由原型覆盖引起
document.getElementsByClassName breaking jQuery class selector caused by Prototype Override
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
我意识到你可能正在支持一个你自己没有构建的应用程序,但我还要说,如果你将来可以选择,永远不要选择一个与其他框架进行功能检测的能力相差的框架。
伪造本机功能应被视为有害的。我在看着你,原型。
- 如何覆盖原型中的事件侦听器
- 使用原型时,JavaScript对象会被覆盖
- javascript原生原型:扩展、添加和覆盖方法
- 覆盖原型方法
- XrayWrapper 错误(值是可调用的)在 Firefox 插件中覆盖原型方法时
- 找不到 Javascript 原型方法覆盖
- 本地作用域函数原型覆盖
- JavaScript 原型 - 覆盖某些元素的 .scrollTo
- 在javascript中覆盖原型时,对象以两种状态存在
- Javascript:覆盖骨干模型的原型
- 我可以覆盖IE8中的原型函数吗?
- 覆盖方法的 JavaScript 原型调用基方法
- 为什么某些原型函数覆盖有效而其他函数无效
- 如何在完全独立的.js文件中覆盖/扩展原型.js类
- 覆盖原型继承中的数组
- 如何在javascript中使用原型覆盖函数
- 原型方法未被覆盖
- 如何“;覆盖“;原型上已定义的(get-)属性
- 原型覆盖范围问题
- document.getElementsByClassName breaking jQuery 类选择器由原型覆盖引起