Coordonnées du texte sélectionné dans la page du navigateur
J'ai besoin des coordonnées en pixels du début de la sélection de texte (n'importe où sur la page, pas dans un textarea).
J'ai essayé en utilisant les coordonnées du curseur, mais cela ne fonctionnait pas très bien parce que les coordonnées du curseur et le début de la sélection ne sont pas toujours les mêmes (par exemple, lorsqu'un utilisateur fait glisser sur un texte).
J'espère que quelqu'un a la solution!
OriginalL'auteur Bouke | 2011-07-27
Vous devez vous connecter pour publier un commentaire.
Dans IE >= 9 et non-IE navigateurs (Firefox 4+, navigateurs WebKit publié depuis le début de 2009, Opera 11, peut-être plus tôt), vous pouvez utiliser le
getClientRects()
méthode deRange
. Dans IE 4 - 10, vous pouvez utiliser leboundingLeft
etboundingTop
propriétés de laTextRange
qui peuvent être extraites à partir de la sélection. Voici une fonction qui va faire ce que vous voulez dans les navigateurs récents.Noter qu'il existe certaines situations dans lesquelles vous pourriez, à tort, obtenir les coordonnées
0, 0
, comme mentionné dans les commentaires de @Louis. Dans ce cas, vous devrez recourir à une solution de contournement temporaire d'insertion d'un élément et d'obtenir sa position.jsFiddle: http://jsfiddle.net/NFJ9r/132/
Code:
Mise à JOUR
J'ai soumis une WebKit bug suite à des commentaires, et c'est maintenant corrigé.
https://bugs.webkit.org/show_bug.cgi?id=65324
De nouveau mis à jour, et est en train de travailler sur WebKit.
J'ai essayé ce code. Il est de retour toujours
x: 0, y:0
même la position du curseur est déplacé dans firefox 20.0.1. Jetez un oeil à cette question similaire qui j'ai demandé récemment. Je suis à la recherche d'une solution de navigateur qui fonctionne avec IE8+, chrome et firefox.Ce code est spécifique pour les sélections/les plages à l'intérieur régulière du contenu HTML plutôt que ces zones de texte, comme c'est Longiligne. Je ne crois pas qu'il est possible de créer un générale de la croix-navigateur solution pour obtenir les coordonnées de la textarea curseur sans faire beaucoup de fastidieux texte de la mesure, c'est pourquoi je n'ai pas répondu à votre question.
Il n'y a plus qu'un problème avec les textareas, je le crains. Exécuter cette violon en Chrome et cliquez à gauche sur "ici" (qui est en gras), sans sélection de texte. Vous obtiendrez
0, 0
. Il est plus facilement reproductible dans Chrome, mais le problème de base est que si un zéro-largeur de gamme est pas dans un nœud de texte, puis le rectangle ont0, 0
coordonnées. Je ne peux pas le reproduire dans FF avec un simple clic de souris car elle préfère régler le curseur à l'intérieur des nœuds de texte sur les clics, mais il peut également se produire dans FF si la sélection est manipulé par programmation.OriginalL'auteur Tim Down
La réponse ci-dessus par TimDown ne fonctionne pas si le curseur est dans un élément vide.
Le code ci-dessous permet de résoudre le problème. Remarquez comment il est presque identique à TimDown de solution sauf que ce code vérifie la
range.getClientRects()
tableau alength>0
avant d'appelerrange.getClientRects()[0]
Bien sûr, vous pouvez l'inclure dans votre réponse.
OriginalL'auteur Jakobovski