I’m doing a javascript assignment and have just learned that I can do it in jQuery if I wish, rather than vanilla javascript. I thought I’d give it a go to see what it’s like.
This is the contents of my javascript function:
rowsArray = $("#Table1 tr");
for (i=0;i<rowsArray.length;i++){
numSeatsInRow = rowsArray[i].getElementsByTagName("img").length; // discovers the number of seats in row [i]
for(j=0;j<numSeatsInRow;j++) { // loops round once for each set in row [i]
var currentSeat = rowsArray[i].getElementsByTagName("img")[j];
currentSeat.setAttribute("id","row" + i + "Seat" + j);
currentSeat.onmouseover = function(){this.src = "images/taken.gif"};
currentSeat.onmouseout = function(){this.src = "images/available.gif"};
currentSeat.onclick = function() {
this.src = "images/mine.gif";
this.onmouseover = null;
this.onmouseout = null;
document.getElementById("myTickets").innerHTML += this.id;
}
}
As you can see, I started converting to jQuery with the first line, but got stuck 🙂
The code works as is, but I figure there must be a more elegant way of doing it in jQuery. I tried using $.each but my selectors or syntax was wrong and it didn’t work. I have a vague idea how it works for a 1D array, but I’m not clear on how to iterate through the items in nested arrays i.e. array[x][y].
The function creates and moves through a 2D array changing the id and mouse events of a set of images.
Any thoughts would be much appreciated 🙂
It can be improved further, but something like this would work:
Using
.each()and the index it passes as the first parameter to the callback shortens it a bit (you don’t need your owniandj, they’re already there) the rest is just jQuery conversion, e.g..hover()for the mouse entering/leaving and.unbind()to remove those handlers it later.Here’s a bit more verbose but much more efficient version using
.delegate():This attaches only 3 handlers to the
<table>and listens for events to bubble up, rather than attaching 3 handlers per image, so it’s much cheaper on the page load side, and and infinitesimal difference on the runtime side.