Como posso envolver a palavra anterior, atual e próxima dentro de uma tag usando jQuery?

Não tenho certeza se o título é bem escolhido ...

Eu estou tentando simular a seleção de texto em HTML / JS / CSS para se livrar da bolha de ação no dispositivo móvel quando realmente selecionando textos.

Para ser mais específico, estou tentando evitar isso:

O visual:

O jeito que eu construí e isso pode mudar porque não importa, é que o texto selecionado está dentro de umspan.selection e dentro dessa tag, há também dois carets usados ​​como manipuladores:

Lorem ipsum dolor                            <!-- Unselected Text -->

<span class="selection">                     <!-- Start selection wrapper -->

  <span rel="previous" class="caret"></span> <!-- The left-side caret -->

  sit amet, consectetur                      <!-- The selected texts -->

  <span rel="next" class="caret"></span>     <!-- The right-side caret -->

</span>                                      <!-- End selection wrapper -->

adipiscing elit.                             <!-- Unselected Text -->

Idealmente, seria divertido usar um arrastar e soltar para selecionar mais ou menos textos, mas acredito que isso seria difícil de fazer e, nesse caso, talvez usando o clique no carets para selecionar a palavra anterior ou a seguinte e embrulhe-o dentro do.selection&nbsp;não seria tão ruim assim.

Aqui está o jsfiddle:http://jsfiddle.net/m6Qx4/

Os textos ao redor podem conter tags HTML, como:<i>, <b>, <span>&nbsp;e<ul>/<li>&nbsp;pode estar presente, tornando a análise mais difícil.

Alguma idéia de como isso pode ser feito?

Atualização de status:

Eu realmente consegui fazer funcionar com.click();&nbsp;ouvinte de eventos usando meus métodos customizados jQuery.

Eventualmente, eu substituirei os eventos de clique com jQuery UI arrastável para selecionar palavras adjacentes, desde que seja utilizável para dispositivos móveis.

Meu bug atual consiste na reposicionamento dos carets vermelhos. Eu tentei destruí-los e prefixar / anexá-los de volta e ainda não está funcionando. Pode ser um bug com o Firefox que não pode recarregar o DOM corretamente após as alterações feitas nos nós de texto?

Referência: jsFiddle

Para verificar a condição de operaçãojsFiddle.net&nbsp;devido a interrupções recentes, visiteTweets.