Je veux savoir quels éléments DOM sont présents dans le texte actuellement sélectionné par l'utilisateur dans le navigateur.
Document.getSelection () nous obtiendrait le texte actuellement sélectionné. Mais comment déterminer les éléments DOM contenus dans cette sélection de texte?
window.getSelection()
vous donne un objet de sélection . Utilisez selection.rangeCount
et selection.getRangeAt()
pour obtenir un objet Range représentant la sélection souhaitée.
Maintenant, vous pouvez obtenir le premier et le dernier noeud dans la sélection de range.startContainer
/ startOffset
et range.endContainer
/ endOffset
. Vous pouvez alors monter et descendre l'arbre pour ramasser tous les éléments entre ces deux positions, par exemple. En utilisant la fonction getElementsBetweenTree()
partir de cette réponse .
Malheureusement, le modèle TextRange d'IE est totalement différent du standard W3 et HTML5, et en général, bien pire. Il n'abandonne pas les positions de début et de fin presque aussi facilement et pas de manière fiable. Tout ce que vous obtenez est parentElement
pour vous dire l'ancêtre commun, et à partir de là, vous êtes limité à deviner où la gamme est basée sur la création d'une nouvelle gamme et en appelant moveToElementText
, puis compareEndPoints
avec la plage de sélection. Et si vous devez connaître la sélection de texte exacte, vous moveStart
alors en fonction de moveStart
/ moveEnd
la gamme et la comparaison, ce qui n'est pas du tout amusant.