为啥 .filter() 在 Internet Explorer 8 中不起作用?

Posted

技术标签:

【中文标题】为啥 .filter() 在 Internet Explorer 8 中不起作用?【英文标题】:Why won't .filter() work in Internet Explorer 8?为什么 .filter() 在 Internet Explorer 8 中不起作用? 【发布时间】:2011-11-01 11:31:45 【问题描述】:

这是行:

songs = songs.filter(function (el) 
  return el.album==album;
);  

这是错误:

对象不支持该属性或方法

这在 Chrome 中可以 100% 正常工作。怎么回事?

【问题讨论】:

我在看到 Paul 之前发布了我的答案。歌曲是数组还是 jQuery 对象? 【参考方案1】:

使用 es5-shim,这样你就可以在 IE8 中使用 filter/indexOf 了!

Facebook 的 react.js 也在使用它。

  <!--[if lte IE 8]>
  <script type="text/javascript" src="/react/js/html5shiv.min.js"></script>
  <script type="text/javascript" src="/react/js/es5-shim.min.js"></script>
  <script type="text/javascript" src="/react/js/es5-sham.min.js"></script>
  <![endif]-->

https://github.com/es-shims/es5-shim

【讨论】:

【参考方案2】:

Array.filter() 直到版本 9 才包含在 IE 中。

你可以用它来实现它:

if (!Array.prototype.filter)

  Array.prototype.filter = function(fun /*, thisp */)
  
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    
      if (i in t)
      
        var val = t[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, t))
          res.push(val);
      
    

    return res;
  ;

发件人:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter

或者由于您使用的是 jQuery,您可以先将数组包装到 jQuery 对象中:

songs = $(songs).filter(function()
  return this.album==album;
); 

【讨论】:

过滤函数的参数是一个索引。要获取实际元素,您可以简单地使用this。 api.jquery.com/filter 你也可以在函数中做 i,v,其中 v 是数组,i 是元素。 这很好用。我只需要删除 if 条件 if (!Array.prototype.filter) 以使其在 IE 中为我工作 你的 jquery sn-p 拯救了我的一天【参考方案3】:

使用 attr() 函数有效吗?

songs = songs.filter(function (index) 
    return $(this).attr("album") == album;
);  

【讨论】:

以上是关于为啥 .filter() 在 Internet Explorer 8 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

过滤器:模糊(1px);不适用于 Firefox、Internet Explorer 和 Opera

为啥 Internet Explorer 6 在某些组织中仍然是企业的最爱? [关闭]

为啥安装完IIS 找不到internet信息服务器

为啥 Internet Explorer 中没有容器中心?

为啥电脑连上wifi却显示无internet