var p = $('p');
p
.html(function(index, oldHtml) {
return oldHtml.replace(/\b(\w+?)\b/g, '<span class="word">$1</span>')
})
.click(function(event) { alert(event.target.innerHTML) });
I took Pablo Fernandez's suggestions into account.
See it on jsFiddle.
Update
So, will this be performant (e.g., it won't freeze up a slow user's browser?) Also, could you elaborate about how event.target works?
It may very well slow the performance of a page with 30,000 words. I'd argue that is excessive and probably would benefit from being paginated, but I don't know your exact circumstances.
event.target
property holds the element that started the event - the event bubbles up / propagates to its parent, which then handles the event, so you don't have 30,000 events on separate span
elements.