IE8及以下浏览器伪数组slice方法兼容处理

前几天同事说数组的slice方法在IE8下有兼容问题,我查阅了MDN,文档里面有提到IE8及以下浏览器中,DOM对象组成的伪数组通过call调用slice方法没有遵循标准行为

我做了个demo在IE8上做了测试

<div>古</div>
<div>德</div>
<div>God</div>

<script>

var dom = document.getElementsByTagName("div");
console.log( Array.prototype.slice.call( dom,1 ) )

</script>

结果如图

提示dom不是js对象,在ie9+浏览器无此问题。MDN官方文档还给出了一坨代码的解决方案,我这里有种方便快捷的方法可以解决问题。既然说dom不是js对象,把它转化成对象不就完了吗,于是我把代码做了如下改造:

<div>古</div>
<div>德</div>
<div>God</div>

<script>

var dom = document.getElementsByTagName("div");
console.log( Array.prototype.concat.apply([],dom).slice(1) )

</script>

兼容问题就这样愉快地解决了~

作者:古德God
出处:http://www.cnblogs.com/wangmeijian

本文版权归作者和博客园所有,欢迎转载,转载请标明出处。

如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!

时间: 2025-01-02 04:59:58

IE8及以下浏览器伪数组slice方法兼容处理的相关文章

数组的slice方法

1.语法 arr.slice(begin,end); 2.说明 begin起始位置,选中元素不包括.若未填写,则从0开始. end结束位置,包括最后一个.若未填写,则直到最后一个. 3.使用 返回结果为一个新数组,对原数组不做改变. 类数组slice方法的使用. Array.prototype.slice.call(arguments); [].slice.call(arguments);

使用apply的方法将伪数组转化为数组

js中好多DOM方法都是针对数组的,可是有时候我们会取得一些伪数组,此时要想操作伪数组,那就必须把伪数组转化为数组,以下通过apply(  )的方法demo一个实例,以供大家参考(以下是部分代码): </head> <body> <span>span</span> <span> span</span> <p>ppp</p> <span>span</span> <span> s

如何将伪数组转换成真正的数组

1.常见的伪数组有哪些? arguments.通过document.getElements..获取到的内容 2.伪数组有什么特点? 具有length属性,也是一个一个的元素组成的,但是构造器不是Array,不能使用数组的方法 3.转换为真正的数组的方法: 通过遍历将伪数组里元素放入到一个新的数组里 通过call改变数组slice方法里的this指向 因为我想要让伪数组也能使用数组的方法,为什么伪数组就不能使用数组方法,为什么数组就能使用push方法 一个数组都是由她的构造器实例化出来的,var

数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题

当函数以 apply 方式调用时, 传参方式是一个由各个参数组成的数组或类数组(一个有length属性的对象),传入参数个数取决于 length 的值,例如,某个对象 args.length=3; apply 会将 args[0],args[1],args[2] 三个参数传入,如果对应的值不存在则传入了undefined. 例如: function f(a,b,c){ console.log(a,b,c);} f.apply(null,{0:123,1:456,2:789,length:2});

数组 / 伪数组 判断及方法调用 (权威指南笔记)

数组判断方法 function isArrayLike(o){ if(o && //o非null.undefined typeof o === "object" && //o是对象 isFinite(o.length) && //o.length是有限数值 o.length > 0 && //o.length为非负数 o.length === Math.floor(o.length) && //o.l

将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)

实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组. 我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组. 方法一:通过Array.prototype属性调用slice方法 var args = Array.prototype.slice.call(arguments); Array 本身是没有 slice 方法,它的方法在 Arr

对于数组(字符串)slice方法的总结

数组(字符串)使用slice方法的目的就是截取目标数组(字符串),通俗的来讲就是截取想要的.网上有很多slice方法的实例加以说明,在此主要是从特殊到一般对此方法进行了总结. 先说总结的方法,再看下面的例子进行理解. 假设已知一个数组长度为len,则参数的有效范围为[-len,len-1],-len和0为第一个元素的下标,-1和len-1表示最后一个元素的下标.slice()总共有两个参数,不填参数返回所有元素:若只填一个参数x,则x为起始元素的下标(起始元素一定会被截取),返回x之后的所有元素

浅谈用原生 js 实现数组的 slice 方法

slice 方法有这几种情况:不传参.传一个参数.传两个参数.并且传参支持负数,具体每个情况的效果在这里就不说了. 核心方法:通过 for 循环遍历 调用此方法的数组 ,把要取出的内容放入新数组,然后将新数组返回. 一切的条件处理判断,都为了 for 循环能够正确的执行 这是好久以前写的了,虽然就8行代码,但是三元运算符套用的太多了,还没加括号,现在回过头来看看真是满眼的星星. Array.prototype._slice = function _slice() { var n1 = Numbe

【js】数组的splice方法和slice方法的区别

1.splice方法和slice都是数组的方法 2.splice方法有3种作用 例如,arr=[1,2,3,4,5,6]; splice方法 删除  arr.splice(1, 1); 返回值为删除的元素,类型为object  替换  arr.splice(1, 1, 'a'); 返回值为被替换的元素,类型为object  插入 arr.splice(1, 0, 'a', 'b'); 返回值为一个空数组,类型为object 注意:得到的新数组为[1,'a','b',2,3,4,5,6] 3.sl