Comment obtenir la position (gauche, haut) de tous les caractères dans un nœud? Je connais juste une méthode: envelopper chaque personnage dans son propre tag et ensuite nous pouvons obtenir sa coordonnée. Mais il est un peu lentComment obtenir la position de chaque caractère
Répondre
J'ai trouvé réponse à ma question - L'interface de gamme peut présenter toutes les informations dont j'ai besoin (Plus d'infos - http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html).
code pour ce faire peut être trouvé ici: https://stackoverflow.com/a/29903556/142317 –
Vous pouvez mettre en cache les largeurs de caractères que vous avez déjà vu.
function findOffset(index) {
// Set some variables early on
var sizes = {},
text = "The text you are getting an offset from.",
lineHeight = 16, // You can get this dynamically if you want
containerWidth = 500, // Same with this one
leftOffset = 0,
topOffset = 0,
i = 0,
cur;
// Loop through and count up the sizes of each character until this one
for (; (i < text.length) && (i <= index); i++) {
// Set the current character
cur = text.charAt(i);
// Check to see if we have a size
if (typeof size[cur] == "undefined") {
// If not: Wrap it in a span (You seemed to already know how to do this)
// then cache the result
size[cur] = findWidthByTemporarilyWrappingInASpan(text, i);
}
// If it's greater than a line can hold, we'll wrap
if ((sizes[cur] + leftOffset) > containerWidth) {
// Reset the left offset
leftOffset = 0;
// Increment the top offset
topOffset += lineHeight;
}
// Otherwise, increment from the left
else {
leftOffset += sizes[cur];
}
}
// return an object with the coordinates
return {
leftOffset: leftOffset,
topOffset : topOffset
};
}
Ensuite, vous pouvez même memoize chaque indice que vous allez saisir et commencer à partir d'une proximité l'un de la prochaine fois que vous appelez cette fonction. Cela signifie que vous restez hors du dom, à l'exception de la plupart du temps pas trop de ~ 50 (alphanumériques + ponctuation, etc) fois, plutôt que pour chaque personnage.
Cela fonctionnerait certainement pour les polices à espacement fixe, mais je pense qu'il y a un certain mérite à d'autres types. Vous devez juste faire la recherche d'emballage pour différents navigateurs. Notez également que cela suppose une justification à gauche, etc. C'est plus une idée qu'une véritable solution de code.
Bonne idée, besoin de prendre en compte la famille de police et la taille de la police (probablement peut être trouvé avec jQuery?) et l'ajouter à la clé de cache par exemple la touche typique sera "G_Tahoma_14" et une autre "G_Tahoma_12". :) –
Comme je le mentionne en utilisant l'objet Range résoudre mon problème et c'est beaucoup plus rapide que l'emballage de chaque symbole dans le noeud span. –
- 1. SQL Obtenir un caractère à la position
- 2. Comment obtenir chaque position de pixel (Coordonnée) d'un caractère creux dessiné à l'aide de Core Graphics?
- 3. C# obtient la position de chaque curseur
- 4. Comment obtenir la position de la souris?
- 5. position d'un caractère NSString
- 6. Comment obtenir la position de l'élément
- 7. comment obtenir la position de simplexmlobject php
- 8. Obtenir la position de pdfptable
- 9. obtenir la position de l'élément
- 10. Obtenir la position de JPopupMenu
- 11. onMouseMove obtenir la position de la souris
- 12. Position du caractère à gauche de la position actuelle dans la chaîne
- 13. Comment obtenir la position du curseur
- 14. Comment obtenir la position d'un élément enfant
- 15. Comment obtenir la position() d'un XElement?
- 16. Comment obtenir la position supérieure d'un élément?
- 17. Cococa Touch - Vérification de chaque caractère entré
- 18. Nombre d'occurrences de chaque caractère unique
- 19. Comment convertir une position de la souris en une position de caractère dans un JEditorPane en Java Swing
- 20. Obtenir la position de la roue PhysX
- 21. php explose chaque troisième instance de caractère
- 22. Obtenir chaque valeur et la position d'un champ de texte pour faire correspondre ruby table_id
- 23. Position différente de fond chaque clic
- 24. comment obtenir la position scrollTop de la fenêtre parent
- 25. Obtenir la position $ _SESSION avec &
- 26. Comment obtenir une position de div? jquery
- 27. Obtenir la position de l'élément par javascript
- 28. Animer la position de l'arrière-plan à chaque clic
- 29. Comment écho une chaîne avec chaque caractère en PHP?
- 30. iTextSharp - Comment obtenir la position d'un mot sur une page
Je crains que vous n'ayez pas beaucoup de choix à l'exception de la méthode que vous avez décrite. Pour connaître la position de chaque personnage, vous devez connaître la taille exacte de chaque lettre et c'est une tâche à peu près impossible car chaque police a une taille différente pour chaque caractère .. –
Possible duplicate: http://stackoverflow.com/questions/5143534/get -la-position-de-texte-dans-un-élément –