As an exercise, I started creating a tic-tac-toe game in Codepen using Javascript and jQuery only (no HTML or CSS). The difference between append()
and appendTo()
is pretty straightforward, but I’d never really come across a sufficent reason to use one over the other until I started building my game. I had a interesting realization I wanted to share.
Both methods append one object to another, but the difference lies in the way you want to order the objects. Let’s say that I wanted to append()
a new div
with the id of container
to body
:
$('body').append("<div id='container'></div>");
In this example, we create a jQuery object from the CSS selector body
then we append()
a new HTML element to it. Another way to do this would be to first create the new element, assign it to a variable, then use appendTo
to append it to the body object:
var newElement = "<div id='container'></div>";
$(newElement).appendTo('body');
Both appear to give us the same result so when should we use one over the other?
To build my gameboard, I used a for
loop to dynamically create 9 divs. I also needed to attach click
events to each div in order to track the moves.
For my first attempt at this, I created a jQuery object out of $('#container')
then appended the newly created divs to it. When I clicked an individual div
I returned 9 console.log
messages instead of 1. I realized that somehow I had attached 9 click events to the #container
. Then I decided to try something like this:
for (i=0; i < 9; i++) {
$("<div class='cell' id='cel" + i + "'></div>")
.one('click', function(e){
index = parseInt((e.target.id)[3]);
moves[index] = (counter % 2 == 0) ? "X" : "O";
counter++;
})
.appendTo('#container');
};
Using appendTo
allowed me to FIRST successfully add click events to each div
BEFORE appending to the #container
. I learned that order matters.