【发布时间】:2012-06-22 17:33:12
【问题描述】:
使用 jQuery 1.7.2。使用早于 1.5.1 的版本进行测试。结果一样。
在小于 9 的 FF 和 IE 中,它可以正常返回 DOM 元素的预期 jQuery 对象。但是,在其他所有内容中,它都会返回 DOM 元素的 jQuery 对象的 jQuery 对象。由于 jQuery 中的那些函数最终期望传递的元素是 DOM 元素(我做了很多跟踪),因此这对任何试图获取宽度或高度的东西都产生了影响。另外,我以前从未遇到过这个问题。 This is the site where it all went wrong。如果您想查看它的实际效果,我还没有修复上一个和下一个按钮。它应该在下一个播放列表元素上调用click()。不是因为这个问题。
代码取自MediaElementJS。
t.controls = t.container.find('.mejs-controls');
t.layers = t.container.find('.mejs-layers');
我最终想出的解决办法。
if(!mf.isFirefox && !(/MSIE [876]/.test(navigator.userAgent))){
t.controls = t.container.find('.mejs-controls').get(0);
t.layers = t.container.find('.mejs-layers').get(0);
}else{
t.controls = t.container.find('.mejs-controls');
t.layers = t.container.find('.mejs-layers');
}
现在,为什么在上帝的绿色地球上,除了 FF 之外,新浏览器都不好?
如果你想设置断点,下面是这些行:
- jquery+mep.js(以前这里是捆绑jQuery的,拿出来测试)
- 下一个:4595
- 上一个:4600
- jquery-1.7.2.js
- jQuery.next(): 5582
- jQuery.prev(): 5585
- jQuery.nth(): 5666
更新
其他页面似乎不受影响;喜欢http://www.commercialsonhold.com/messagesamples/aesthetics.htm。我开始认为页面上的其他东西正在与 jQuery 混淆。该网站是Joomla!我经常在 Joomla 上使用 MooTools!但是,通常是 jQuery 根本不工作,而不仅仅是一个功能异常。
更新
jsFiddle:http://jsfiddle.net/h5ahY/4/
【问题讨论】:
-
t.container 是在哪里定义的?这可以在一个简单的 jsfiddle 中复制吗?
-
第 1764 行
t.container=$('<div id="' + t.id + '" class="mejs-container">'+'<div class="mejs-inner">'+'<div class="mejs-mediaelement"></div>'+'<div class="mejs-layers"></div>'+'<div class="mejs-controls"></div>'+'<div class="mejs-clear"></div>'+'</div>' + '</div>') -
在小提琴中,我得到的结果与你得到的结果不同。包含包含 dom 元素的 jQuery 对象的 jQuery 对象没有意义,jQuery 会自动清理它。 jsfiddle.net/kxz8v/2 正如你在右边看到的,即使是我最后一次尝试创建一个包含 jQuery 对象的 jQuery 对象,最终也得到了一个包含 dom 元素的 jQuery 对象。
-
这正是它让我感到困惑的原因。在我通过 Chrome 调试工具和 IE 调试工具进行的所有跟踪中,当它到达
t.controls = t.container.find('.mejs-controls');时,t.conrols将是jQuery{[0]=jQuery{[0]=DivElement,...},...},而不是正确的jQuery{[0]=DivElement,...}。在此之后添加对问题的更新。其他页面不受影响。 -
@KevinB 添加了一张显示 Chrome 调试工具中奇怪结果的图片和一个使用原始代码的 jsFiddle。