[SOS] réécriture dans un texte aréea (gros probleme)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [SOS] réécriture dans un texte aréea (gros probleme)

par Death83 » 12 sept. 2005, 18:29

en fait j'arrive pas a résoudre le probleme.

Par exmemple si je emt ca dans mon texte area:

avant select apres

et je selectionne select en mettant le grs ca me donne:
avantselectavant select
[/code]
Donc le ApresB affiche AvantB+B !!!
en fait le lenght il doit pas le prendre dans le bon sens au lieu d'aller a la fin il retourne au début.
Comment je dois faire?

par Death83 » 12 sept. 2005, 18:19

Merci beaucoup c'est une tres bonne methode j'y avait pas penser ( a vrai dire je debut en javascript et je ne savais pas que l'on pouvait utiliser les selectionsstar selectionsend comme ca.

Par contre il y a un petit bug, ca réecris le texte selectionné a la suite mais je vais essayer de trouver le probleme. Merci encors ;). ca faisait 2semaines que je galerais dessus lol.

par sadeq » 12 sept. 2005, 15:08

Si tu ne veux pas utiliser la fonction replace.
Tu utilise les mathématiques :
supposant que ton texte entier est A(1..n) où 1..n est sa longueur.
et que le texte sélectionné est B = A(x..y) où x..y les position début/fin de sélection sachant que 1 <= x <= y <= n
Alors :
A = A(1..x-1) + A(x..y) + A(y+1..n)
où :
A(1..x-1) est le texte avant la sélection
A(y+1..n) est le texte après la sélection

L'algorithme qui te concerne est alors le suivant :
1. récupérer la sélection pour la modifier : B = A(x..y)
2. remplacer la sélection par la modification : nouveau A = A(1..x-1) + B modifié + A(y+1..n)

Le programme JS :
//Récupérer les parties : avant sélection, sélection et après sélection
var AvantB = document.forms['postagenews'].news.value.substring( 0, document.forms['postagenews'].news.selectionStart -1 );

var B = document.forms['postagenews'].news.value.substring( document.forms['postagenews'].news.selectionStart, document.forms['postagenews'].news.selectionEnd ); 

var ApresB = document.forms['postagenews'].news.value.substring( document.forms['postagenews'].news.selectionEnd +1, document.forms['postagenews'].news.length ); 

//Modifier la sélection
         if(balise=="URL") 
         { 
            var URL=prompt("URL=","http://"); 
            B="["+balise+"=\""+URL+"\"]"+B+"[/"+balise+"]"; 
         } 
         else 
         { 
             B="["+balise+"]"+B+"[/"+balise+"]"; 
         } 

//Remplacer la sélection
         document.forms['postagenews'].news.focus(); 
         document.forms['postagenews'].news.value= AvantB + B + ApresB; 
          
      break;

[SOS] réécriture dans un texte aréea (gros probleme)

par Death83 » 11 sept. 2005, 19:06

Salut a tous,

Je viens vous voir sur votre forum a la rescouce. Ca fait une semaine que je suis bloqué et j'espere que quelqu'un parmis vous poura me déloquer ;).

J'expose mon problem:

Je suis en train de faire un éditeur de text dans le principe de celui de phpBB ( vous connaissez tous comme ca). J'ai réussi a le faire nickel pour internet explorer mais j'ai un petit soucis sous firefox.

Le principe de l'éditeur de texte est d'encadrer le texte sélectionné par des balises. POur se faire je récupert donc le texte sélectionné, et je lui ajoute a gauche et a droite des balises (jusqu'e la ca marche). Le probleme est que lorsque je renvoie le texte dans le textarea il écrase tout le texte qui s'y trouvait deja a lors que je souhaite qu'il ne remplace que le texte sélectionné .

voila le code concerné:

Code : Tout sélectionner

//--------------------------------- case "Netscape": //mozilla, firefox, ... //--------------------------------- var haha = document.forms['postagenews'].news.value.substring( document.forms['postagenews'].news.selectionStart, document.forms['postagenews'].news.selectionEnd ); if(balise=="URL") { var URL=prompt("URL=","http://"); var insertion="["+balise+"=\""+URL+"\"]"+haha+"[/"+balise+"]"; } else { var insertion="["+balise+"]"+haha+"[/"+balise+"]"; } document.forms['postagenews'].news.focus(); document.forms['postagenews'].news.value= insertion; break;
pouvez vous m'aider.

EN résumé pour ceux qu'y m'aurais pas compris, cette ligne la:

Code : Tout sélectionner

document.forms['postagenews'].news.value= insertion;
ecrase tout le texte deja présent. Et je voudrais juste remplacer le texte sélectionné.

Voila merci d'avance ;).