Retrieving an element by array index in jQuery vs the each() function.
Posted
by Alex Ciminian
on Stack Overflow
See other posts from Stack Overflow
or by Alex Ciminian
Published on 2010-04-08T22:26:23Z
Indexed on
2010/04/08
22:33 UTC
Read the original article
Hit count: 138
I was writing a "pluginable" function when I noticed the following behavior (tested in FF 3.5.9 with Firebug 1.5.3).
$.fn.computerMove = function () {
var board = $(this);
var emptySquares = board.find('div.clickable');
var randPosition = Math.floor(Math.random() * emptySquares.length);
emptySquares.each(function (index) {
if (index === randPosition) {
// logs a jQuery object
console.log($(this));
}
});
target = emptySquares[randPosition];
// logs a non-jQuery object
console.log(target);
// throws error: attr() not a function for target
board.placeMark({'position' : target.attr('id')});
}
I noticed the problem when the script threw an error at target.attr('id')
(attr
not a function). When I checked the log, I noticed that the output (in Firebug) for target was:
<div style="width: 97px; height: 97px;" class="square clickable" id="8"></div>
If I output $(target)
, or $(this)
from the each()
function, I get a nice jQuery object:
[ div#8.square ]
Now here comes my question: why does this happen, considering that find()
seems to return an array of jQuery objects? Why do I have to do $()
to target
all over again?
[div#0.square, div#1.square, div#2.square, div#3.square, div#4.square, div#5.square, div#6.square, div#7.square, div#8.square]
Just a curiosity :).
© Stack Overflow or respective owner