为啥 .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