Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2011, 10h47   #1
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Par défaut Positionner le caret dans un contenteditable

Bonjours à tous!

Tout est dans mon titre : Comment positionner le caret à un endroit précis dans un bloc en contenteditable ?

J'arrive d'ores et déjà à récupérer la sélection, à la modifier et à recréer une sélection autour du texte modifié mais rien à faire le focus se positionne au début du bloc...

Merci à tous pour votre aide!
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h26   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
pour IE:
Code :
1
2
 
var sel= document.body.createTextRange();
pour ffx
Code :
1
2
 
var sel= document.createRange();
ensuite regarde dans les propriétés de sel ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h29   #3
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Comment je fais ça pour voir les propriétés de "sel" ?
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h36   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
Un code vite fair juste pour visualiser
Code :
1
2
3
4
5
6
var liste=""
for (prop in sel){
 liste+=prop +' => '+sel[prop]+'<br/>';
}
 
document.body.innerHTML+=liste
ce qui sous IE me donne:
Citation:
text =>
boundingWidth => 0
offsetLeft => 12
boundingLeft => 12
htmlText =>
boundingTop => 17
offsetTop => 17
boundingHeight => 0
et sous ffx :
Citation:
startContainer => [object HTMLDocument]
startOffset => 0
endContainer => [object HTMLDocument]
endOffset => 0
collapsed => true
commonAncestorContainer => [object HTMLDocument]
setStart => function setStart() { [native code] }
setEnd => function setEnd() { [native code] }
setStartBefore => function setStartBefore() { [native code] }
setStartAfter => function setStartAfter() { [native code] }
setEndBefore => function setEndBefore() { [native code] }
setEndAfter => function setEndAfter() { [native code] }
collapse => function collapse() { [native code] }
selectNode => function selectNode() { [native code] }
selectNodeContents => function selectNodeContents() { [native code] }
compareBoundaryPoints => function compareBoundaryPoints() { [native code] }
deleteContents => function deleteContents() { [native code] }
extractContents => function extractContents() { [native code] }
cloneContents => function cloneContents() { [native code] }
insertNode => function insertNode() { [native code] }
surroundContents => function surroundContents() { [native code] }
cloneRange => function cloneRange() { [native code] }
toString => function toString() { [native code] }
detach => function detach() { [native code] }
START_TO_START => 0
START_TO_END => 1
END_TO_END => 2
END_TO_START => 3
createContextualFragment => function createContextualFragment() { [native code] }
isPointInRange => function isPointInRange() { [native code] }
comparePoint => function comparePoint() { [native code] }
getClientRects => function getClientRects() { [native code] }
getBoundingClientRect => function getBoundingClientRect() { [native code] }
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h55   #5
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Merci pour cette information,

Effectivement j'utilise quelques une de ces méthodes comme ceci:

Code :
1
2
3
4
5
6
7
 
el("editable").focus();
var range = document.createRange();	
range.setStart(el("editable"), 1);
range.setEnd(el("editable"), 2);
var objet_selection = window.getSelection();
objet_selection.addRange(range);
Je ne vois pas comment et/ou quel méthode permet de positionner le curseur.
As-tu un exemple s'il te plait?
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h03   #6
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
setStart par exemple ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h11   #7
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Non setStart détermine le début de la sélection et pas la position du curseur...

Le premier argument est l'élément html qui dois recevoir la sélection, le deuxième argument est le numéro du noeud où commence la sélection.

Tu peux essayer mon script tu verras ça ne positionne pas le curseur.
D'ailleurs si tu pouvez le tester je saurai si le problème vient d'une autre partie de mon script ou non.
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h14   #8
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
as tu essyé une unsertion de vide à l'endroit voulu avec un setStart=setEnd ??
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 12h23   #9
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Je viens de tester le curseur se positionne au début du div éditable.

Exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<div id="editable" class="editable" contenteditable="true">xxxxx<b>yyyyy</b>zzzzz</div>
<script type="text/javascript">
function el(id)
{
	return document.getElementById(id);
}
 
el("editable").focus();
var range = document.createRange();	
range.setStart(el("editable"), 1);
range.setEnd(el("editable"), 2);
var objet_selection = window.getSelection();
objet_selection.addRange(range);
</script>
Une fois le chargement terminé en écrivant directement du texte on se rend compte que le focus est au début et non à la zone sélectionnée.
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 13h00   #10
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
Code :
1
2
3
4
5
 if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
ceci fonctionne sous FFX pour un textarea ....
mais à priori pas pour un content editable ...

sinon http://stackoverflow.com/questions/1...nteditable-div
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 13h21   #11
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Merci SpaceFrog c'est effectivement le script que j'étais entrain d'étudier...La resélection se fait bien mais le curseur est toujours indomptable.

En tout cas le principe d'insérer des spans avant et après le texte de remplacement pour recalculer une nouvelle sélection me parait nettement mieux que setStart et setEnd pour lesquelles il faut indiquer le noeud dans lequel se trouvera la selection...

Que faire pour positionner le curseur ?
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 13h23   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
Cela provient à mon avis du contenteditable ...
Pour moi auras plus vite fait de placer temporairement un textarea au dessus de la zone...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h22   #13
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Je continue de penser que c'est possible eux le font : Ici.

J'ai télécharger le source mais je n'ai pas encore eu le temps de la regarder, affaire à suivre!

Reste en attente d'infos complémentaires.
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h40   #14
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 793
Points : 35 793
Citation:
Envoyé par xess91
Je continue de penser que c'est possible eux le font : Ici.
Comment ça eux le font

Tout ce que je vois, c'est que le curseur se positionne à l'endroit où tu as cliqué dans le texte, il n'y a rien d'extraordinaire à ça ni de code pour le gérer
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h50   #15
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
Trouvé sous IE ...
Code :
1
2
3
 sel = document.selection.createRange();
  sel.moveStart('character', pos);
  sel.select();
pas encore pour ffx
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h53   #16
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 032
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 032
Points : 45 129
Points : 45 129
ha ben voilà

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Nouvelle page 1</title>
<script type="text/javascript">
function placeCaret(obj,pos){
 
obj=document.getElementById(obj); 
obj.focus();
if(document.selection) {
  sel = document.selection.createRange();
  sel.moveStart('character', pos);
  sel.select();
}
else{
  sel = window.getSelection();
  sel.collapse(obj.firstChild, pos+1);
  sel.select()
}
}
</script>
</head>
 
<body>
<div id="foo" contenteditable >
ljhlkjhlkjh
</div>
<script type="text/javascript">
placeCaret('foo',3)
</script>
 
</body>
</html>
Testé sous IE FFX et chrome

ATTENTION : celà ne tient pas compte des balises html dans le div ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 16h30   #17
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Merci SpaceFrog,

Je vais rajouter cela à mon script!

Bovino, si j'ai bien compris le script Aloha transforme les divs en éditable lors d'un clic pour éditer à la volée les blocs.

En tout cas merci pour l'investissement je suppose que pos vaut le nombre de caractères!?
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 18h24   #18
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 793
Points : 35 793
Citation:
Envoyé par xess91
Bovino, si j'ai bien compris le script Aloha transforme les divs en éditable lors d'un clic pour éditer à la volée les blocs.
Oui, c'est le principe de contenteditable.
Pour preuve : http://dmouronval.developpez.com/editable/ : pas une once de JavaScript, pourtant tu peux cliquer où tu veux, le curseur sera correctement positionné en mode édition
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 18h27   #19
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
Bonjour,
cette discussion pourrait vous intéresser et notamment http://www.developpez.net/forums/d10...x/#post5763662
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2011, 22h04   #20
Membre actif
 
Avatar de xess91
 
Homme
Inscription : octobre 2008
Messages : 407
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 407
Points : 160
Points : 160
Oui bovino tu as raison et c'est cela qui est bien, mais la particularité du script Aloha est qu'il exploite cette possibilité dans le cadre d'un wysiwyg qui fournit des fonctionnalités d'éditions de base et je présume sans iframe.
xess91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h10.


 
 
 
 
Partenaires

Hébergement Web