I have a simple hide/show which shows the hidden message and changes the links text when the link is clicked, everything works but, my problem is when I click one link, all the hidden messages gets shown instead of just the one that I've clicked.

I need to add something like $(this).parent().show(); but I'm not sure where to put this or is there an easier way?

1. There is no mention of .message, how does $(this).parent know it needs to select .message?

$(this).parent() takes it up to the paragraph element, and the next('div') part then moves on down to the message that immediately comes after the paragraph.

Having .message is useful if there's an outer context from which you can then select the message, but in this case with the way you have structured your HTML that's not possible.If the HTML were instead something that keeps the link and message in a separate area from the other ones, then using .message would be useful.