[Textarea] Sélection dans un textarea sous IE
Bonjour,
j'ai une fonction qui gère le formatage d'un texte contenu dans un textarea.
Elle réagit à l'appel de boutons.
La portion de code qui suit fonctionne très bien sous firefox mais sous IE je n'arrive pas à lui faire prendre ma sélection.
Je tourne autour du pot, il y a une erreur dans mon script que je ne dégotte pas.
Résultat sous IE il place les pseudos balises autour de l'ensemble du texte compris dans le champ...
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
function format(id_source, baliseArea , classeHTML ,id_source, id_cible , id_preview) {
elt = $(id_source);
texte = elt.value;
//pour IE
if(typeof elt.selection != 'undefined'){
elt.focus();
var sel = elt.createTextRange(); //récupère une zone de texte
sel.moveToBookmark(document.selection.createRange().getBookmark());//déplace toi jusqu'au point d'insertion
sel.moveStart('character', - elt.value.length);
var Debut = sel.text.length;
sel.moveEnd('character', elt.value.length);
var Fin = elt.value.length - sel.text.length;
var milieu = "["+ baliseArea + "]http://" + elt.value.substring(Debut, Fin) + "[/" + baliseArea + "]" ;
var tdebut=""; // chaine avant la selection
var tfin=""; // chaine apres la selection
for (i = 0 ; i<texte.length ;i++ ){
if (i < Debut){
tdebut+=texte.charAt(i);
}
if (i >= Fin){
tfin+= texte.charAt(i);
}
}
if (milieu){
elt.value = tdebut + milieu + tfin;
}
else{
elt.value = tdebut + "["+ baliseArea + "][/" + baliseArea + "]" + tfin; //nouvelle chaîne vide
}
}
else { //pour firefox
var sel = elt.value.substring(elt.selectionStart, elt.selectionEnd);
var Debut = elt.value.substring( 0, elt.selectionStart );
var Fin = elt.value.substring (elt.selectionEnd, elt.selectionEnd +1000);
var milieu = "["+ baliseArea + "]" + sel + "[/" + baliseArea + "]" ;
if (milieu){
elt.value = Debut + milieu + Fin;
}
else{
elt.value = Debut + "["+ baliseArea + "][/" + baliseArea + "]" + Fin; //nouvelle chaîne vide
}
}
identique(id_source , id_cible , id_preview)
} |
Peut-on m'aider à y voir plus clair ? Merci