javascript - Result of `document.getElementsByClassName` doesn't have array methods like `map` defined, even though it is an array -
javascript - Result of `document.getElementsByClassName` doesn't have array methods like `map` defined, even though it is an array -
i have next bit of code select divs , add together click handler on them
var tiles = document.getelementsbyclassname("tile"); tiles.map(function(tile, i){ tile.addeventlistener("click", function(e){ console.log("click!"); }); });
this throws error because map
not defined, though tiles array. if create array this, map works fine:
var = [1, 2, 3, 4]; a.map(/*whatever*/);
a workaround attach map tiles this:
tiles.map = array.prototype.map;
this works fine. question why doesn't tiles
have map defined on it? not array?
right, it's not array. it's "array-like".
don't attach map
tiles
. do
array.prototype.map.call(tiles, function...)
some might suggest
array.prototype.slice.call(tiles).map(function...
which sort of boils downwards same thing. there prefer write
[].slice.call(tiles).map(function...
which saves few keystrokes.
of course, since you're not using map
homecoming array, loop in old-fashioned way:
for (var = 0; < tiles.length; i++) { tiles[i].addeventlistener("click", function(e){ console.log("click!"); }); }
see explanation @ mdn. although discusses nodelist
, same principles apply htmlcollection
, getelementsbyclassname
returns.
javascript arrays map
Comments
Post a Comment