Resalte el rango de texto usando JavaScript

Me gustaría resaltar (aplicar css) un cierto rango de texto, denotado por su posición inicial y final. Esto es más difícil de lo que parece, ya que puede haber otras etiquetas dentro del texto, que deben ignorarse.

Ejemplo

<div>abcd<em>efg</em>hij</div>

highlight(2, 6) necesita resaltar"cdef "sin quitar la etiqueta.

Ya he intentado usar un objeto TextRange, pero sin éxito.

¡Gracias por adelantado

Respuestas a la pregunta(4)

Su respuesta a la pregunta