类数组转换为数组makeArray()
面试的时候遇到这个问题,在jquery中如何实现的将argements或者getElementsByTagName这种类数组转换为真正的数组?
查了API,jQuery.makeArray(obj)转换后,任何有特殊功能的对象将不再存在,而变成是一个普通的数组对象。
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*")); //这样domNodes就可以应用Array下的所有方法了
makeArray: function( a ) { var r = []; // Need to use typeof to fight Safari childNodes crashes if ( typeof a != "array" ) for ( var i = 0, al = a.length; i < al; i++ ) r.push( a[i] ); else r = a.slice( 0 ); return r; }
makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { core_push.call( ret, arr ); } } return ret; }
<div>First</div> <div>Second</div> <div>Third</div> <div>Fourth</div> <script> var elems = document.getElementsByTagName("div"); // returns a nodeList var arr = jQuery.makeArray(elems); arr.reverse(); //此时arr为转换后的数组,可以正常使用数组的反转方法 $(arr).appendTo(document.body); </script>
相关推荐
罗惠东 2017-08-16
yaasshole 2018-10-08
Hhjian 2017-08-16
fayeyang 2016-10-31
msyndra 2015-12-22
Gcalolin 2019-06-27
卧斋 2015-06-16
87493063 2015-04-22
罗惠东 2015-02-08
publicTIM 2013-06-28
杉林的HelloWord 2013-04-08
LauraRan 2020-09-28
beibeijia 2020-06-06
zhou0ddw 2020-06-04
breakpoints 2020-05-17
stefan0 2020-04-22
稳哥的小灶 2020-01-04
Nicolase 2019-12-19