jQuery的every()在Internet Explorer上无法正常工作。

3
当我在IE中运行以下javascript时,会在"data.every(...)"处收到"错误:对象不支持此属性或方法"的消息。
它在Chrome / Firefox中可以正常工作。 alt text
3个回答

14

.every() 是 JavaScript 1.6 对数组原型的增强。Firefox 从 Gecko 1.8b2 开始支持此方法,如果不支持,请使用以下代码进行快速替换。

来自 MDC:

  

every 是 ECMA-262 标准的最新补充;因此,它可能不会在所有浏览器中存在。您可以通过将以下代码插入到脚本开头来解决这个问题,在不原生支持 every 的实现中使用它。这个算法正是 Firefox 和 SpiderMonkey 中使用的。

if (!Array.prototype.every)
{
  Array.prototype.every = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this &&
          !fun.call(thisp, this[i], i, this))
        return false;
    }

    return true;
  };
}

为什么要使用 this.length >>> 0?它除了返回 this.length 之外还有其他作用吗? - Krab
那是从MDC文章复制的... this.length >>> 0 是一个无符号位移,我能想到唯一的原因是确保 length 是一个无符号数 耸肩 - gnarf

6

jQuery中没有定义every方法。你可以使用each代替:

$.each(data, function(index, task) {
    createCardFromTask(task);
});

稍微简短一些:

$.each(data, function() {
    createCardFromTask(this);
});

+1 - $.each()绝对是这个简单回调函数的最佳选择... - gnarf
12
以防其他人寻找 jQuery 的每个方法 - eachevery 是非常不同的东西 - $.each 将返回一个 jQuery 对象,而通常使用 every 时会期望返回一个布尔值。对于这个答案被标记为正确,我不确定自己的感觉如何。 - Jesse

0

最近我在尝试循环遍历DOM元素的选择时,也遇到了使用.each函数的同样问题。结果发现问题并不是出在Javascript上,而是HTML中我们使用了一个特殊的标签。ABBR标签在IE6中不被支持。

我建议你首先检查所有的标签,确保它们都被IE6所支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接