rkampf
Messages postés3Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention19 novembre 2003 19 nov. 2003 à 16:48
J'ai trouvé la solution suivante :
la fonction getPosCurseur(objetTextArea) donne la position du curseur dans la zone de texte.
la fonction insereChaine(texte) permet d'insérer la chaine désirée à la position du curseur trouvée par la fonction getPosCurseur()
<HTML>
</html>
<script>
var g_posCurseur; // variable global positition du curseur
//définit la postition du curseur
function setPosCurseur() {
g_posCurseur = getPosCurseur(mForm.mTextArea);
}
//retourne l'emplacement du curseur
function getPosCurseur(oTextArea) {
//sauve le contenu avant modification de la zone de texte
var sAncienTexte = oTextArea.value;
//crer un objet "Range Objet" et sauve son texte avant modification
var oRange = document.selection.createRange();
var sAncRangeTexte = oRange.text;
//cette chaine ne doit pas se retrouver dans la zone de texte !
var sMarquer = String.fromCharCode(28)+String.fromCharCode(29)+String.fromCharCode(30);
//insère la chaine où le curseur est
oRange.text = sAncRangeTexte + sMarquer; oRange.moveStart('character', (0 - sAncRangeTexte.length - sMarquer.length));
//sauver la nouvelle chaine
var sNouvTexte = oTextArea.value;
//remet la valeur du texte à son ancienne valeur
oRange.text = sAncRangeTexte;
//recherche dans la nouvelle chaine et trouve l'emplacement
// de la chaîne de marquage et renvoie la position
for (i=0; i <= sNouvTexte.length; i++) {
var sTemp = sNouvTexte.substring(i, i + sMarquer.length);
if (sTemp == sMarquer) {
var cursorPos = (i - sAncRangeTexte.length);
return cursorPos;
}
}
}
//insère la chaine dans la zone de texte où le curseur est
function insereChaine(sChaine) {
//si curseur n'a pas de position : insère la chaine à la fin
if (typeof(g_posCurseur)=='undefined') {
mForm.mTextArea.value+=sChaine;
}else {
var firstPart = mForm.mTextArea.value.substring(0, g_posCurseur);
var secondPart = mForm.mTextArea.value.substring(g_posCurseur,mForm.mTextArea.value.length);
mForm.mTextArea.value = firstPart + sChaine + secondPart;
}
}
</SCRIPT>
Régis