【问题标题】:inconsistent behavior with jQuery's find()与 jQuery 的 find() 行为不一致
【发布时间】: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。

标签: jquery mediaelement.js


【解决方案1】:

发现问题。它是 MooTools。我不知道怎么做,也不知道为什么。

通过将 jQuery 包含移动到 MooTools 包含上方并在任何地方使用 jQuery 而不是 $ 来修复。

现在我知道如何使用它,很快就会得到一个 jsFiddle。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2013-09-02
    • 2020-02-28
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多