クラス配列を配列に変換するmakeArray()
1516 ワード
面接でこの問題に遭遇し、jqueryでargementsやgetElementsByTagNameという
クラス配列を真の配列に変換しますか?
APIを調べたjQuery.makeArray(obj)変換後、特殊な機能を持つオブジェクトは存在せず、通常の配列オブジェクトになります.
クラス配列を真の配列に変換しますか?
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>