They seem to wrap everything in <span> s, and also add metadata about the number of characters. From their source:
<p><span class="highlight js-highlight-this" data-end-char="23" data-highlight-count="0" data-start-char="0" id="highlight-86552-0">No doubt they can lose.</span> <span class="highlight js-highlight-this" data-end-char="132" data-highlight-count="0" data-start-char="24" id= "highlight-86552-24">As Adi says, I don't think they will, but OKC - in particular - still looms as a legit threat to the throne.</span> <span class="highlight js-highlight-this" data-end-char="336" data-highlight-count="0" data-start-char="133" id="highlight-86552-133">The Thunder are better on both ends this year than last, have the experience of having been there before, and you know Durant doesn't want to spend the rest of his career playing second fiddle to LeBron.</span> <span class= "highlight js-highlight-this" data-end-char="588" data-highlight-count="0" data-start-char="337" id="highlight-86552-337">The problem, and I think the reason so many assume the Heat will repeat, is that we haven't seen this version of the Thunder (with Kevin Martin rather than James Harden in the 6th man role) in the playoffs before so the mystery factor comes into play.</span></p>
However, another more flexible approach would be to simply use a regular expression to extract sentences from the text of any element, be it span, p, h1, etc.
In this case, you will find sentences with a regular expression, and then alternately surround each <span> element dynamically with javascript. Then you can attach event listeners to those dynamically created tags to make a selection, and all that you would like to do when you hover, click, etc.
Jonah source share