I am building a JS script which at some point is able to, on a given page, allow the user to click on any word and store this word in a variable.
I have one solution which is pretty ugly and involves class-parsing using jQuery:
I first parse the entire html, split everything on each space " ", and re-append everything wrapped in a <span class="word">word</span>, and then I add an event with jQ to detect clicks on such a class, and using $(this).innerHTML I get the clicked word.
This is slow and ugly in so many ways and I was hoping that someone knows of another way to achieve this.
PS: I might consider running it as a browser extension, so if it doesn’t sound possible with mere JS, and if you know a browser API that would allow that, feel free to mention it !
A possible owrkaround would be to get the user to highlight the word instead of clicking it, but I would really love to be able to achieve the same thing with only a click !
Here’s a solution that will work without adding tons of spans to the document (works on Webkit and Mozilla and IE9+):
https://jsfiddle.net/Vap7C/15/
in IE8, it has problems because of getSelection. This link ( Is there a cross-browser solution for getSelection()? ) may help with those issues. I haven’t tested on Opera.
I used https://jsfiddle.net/Vap7C/1/ from a similar question as a starting point. It used the Selection.modify function:
Unfortunately they don’t always get the whole word. As a workaround, I got the Range for the selection and added two loops to find the word boundaries. The first one keeps adding characters to the word until it reaches a space. the second loop goes to the end of the word until it reaches a space.
This will also grab any punctuation at the end of the word, so make sure you trim that out if you need to.