2010-11-10 7 views
1

On m'a parlé de textRange dans IE, mais je ne trouve pas d'équivalent dans d'autres navigateurs pour cela. J'ai besoin d'un moyen de lire les décalages X, Y de l'élément que le spectateur voit.Comment obtenir le décalage de caractère X & Y (coordonnées)

+1

Pouvez-vous fournir quelques-uns de queues quant à exactement ce que vous essayez d'atteindre? Parlez-vous d'obtenir les coordonnées de la sélection de l'utilisateur? –

Répondre

2

Firefox a l'objet Range au lieu de TextRange dans IE - https://developer.mozilla.org/en/DOM/range

Dès le premier regard que je ne vois pas les méthodes qui renvoient les coordonnées, mais ils ont quelque chose qui va venir dans la version 4.0 qui pourrait aider:

https://developer.mozilla.org/en/DOM/range.getBoundingClientRect

Renvoie un objet qui ClientRect limite le contenu de la plage; ce un rectangle englobant l'union des rectangles englobants pour tous les éléments de la gamme.

Vous pouvez également regarder ici: https://developer.mozilla.org/en/DOM%3aElement.getClientRects

La valeur retournée est une collection de objets ClientRect, une pour chaque boîte de frontière CSS associée à l'élément . Chaque ClientRect objecter contient lecture seule gauche, en haut, à droite et les propriétés de fond décrivant la zone de bordure , en pixels, avec le supérieur gauche par rapport à la partie supérieure gauche de la vue, à moins que l'élément est l'intérieur d'un Élément SVG foreignobject, auquel cas la partie supérieure gauche est relative à l'ancêtre d'objet étranger le plus proche et au système de coordonnées de cet objet étranger . Pour les tableaux avec les légendes , la légende est incluse même bien qu'elle se trouve en dehors de la zone de bordure de la table.

Initialement, Microsoft avait l'intention cette méthode pour renvoyer un objet TextRectangle pour chaque ligne de texte. Toutefois, le projet de travail CSSOM spécifie que renvoie un ClientRect pour chaque boîte de bordure . Pour un élément en ligne, les deux définitions sont identiques. Mais pour un élément de bloc, Mozilla renverra seulement un seul rectangle.

Pour sélectionner:

IE:

var range = document.body.createTextRange(); 
range.moveToElementText(myDiv); 
range.select(); 

Firefox, Opera, WebKit nightlies:

var selection = window.getSelection(); 
var range = document.createRange(); 
range.selectNodeContents(myDiv); 
selection.removeAllRanges(); 
selection.addRange(range); 

Safari:

var selection = window.getSelection(); 
selection.setBaseAndExtent(myDiv, 0, myDiv, 1); 
+0

J'ai besoin de FF 3+, y a-t-il un moyen de sélectionner le texte interne? – Himberjack

+0

Il semble qu'il n'y ait aucune différence entre les propriétés des lettres 'o' et 'F' lors de la sélection de chacune d'entre elles et de la lecture de leurs décalages. Y a-t-il une explication de ceci? J'essaie d'obtenir les coordonnées de chaque lettre ... (le TOP PIXEL de chaque lettre) – Himberjack

+0

Il indique probablement les coordonnées du carré que la sélection couvre et il semble être le même pour toutes les lettres, peu importe capital ou pas . Je ne suis pas sûr que vous pourriez obtenir les coordonnées de glyphe dans le navigateur, vous pourriez être mieux d'utiliser SVG pour cela si c'est possible. –

Questions connexes