Comment réduire un code-source en javascript très répétitif ?

Résolu
simartinez007 Messages postés 12 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 novembre 2009 - 3 nov. 2009 à 04:51
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 5 nov. 2009 à 18:24
Hello à tous,
Tous d'abord la situation :
Mon code javascript contiens plusieurs fonction qui ont pour effet de modifier le contenu d'un textarea.
Pour mettre en italique, gras, remplacer oe par ?, ? etc.
Mon problème :
Si mon code fonctionne très bien je me retrouve avec un code possédant un grand nombres de fonction qui sont constitué, pour une partie, des même lignes.
Ma question :
Est-il possible d'éviter les répétitions alors que cette partie de code ne peux pas être reproduit par une boucle de type for (par exemple) ? Serait t-il possible d'uttiliser une fonction elle même appellé par mes autres fonctions ?

Exemple de code :
(Le texte en bleu se répète ! Comment éviter cela ?)
// Italique
function italique() {
var tx = document.form_ref.text_area.value;
var tx2 = document.form_ref.text_area;
var tx_lg = tx.length;
if (tx2.setSelectionRange) {
var sel = tx.substring(tx2.selectionStart, tx2.selectionEnd);
} else if (document.selection) {
var sel = document.selection.createRange().text;
}
var sel_lg = sel.length;
if ( typeof tx2.selectionStart != 'undefined' ) {
var pos = tx2.selectionStart;
} else if (document.selection) {
tx2.focus();
var range = tx2.createTextRange();
range.moveToBookmark(document.selection.createRange().getBookmark());
range.moveEnd('character', tx2.value.length);
var pos = tx2.value.length - range.text.length;
}
if (tx_lg > 0 && sel_lg > 0 && pos > -1) {
var texte_final = tx.substring(0, pos) + "{" + tx.substring(pos, pos+sel_lg) + "}" + tx.substring(pos+sel_lg, tx_lg);
document.form_ref.text_area.value = texte_final;
}
}

// Gras
function gras() {
var tx = document.form_ref.text_area.value;
var tx2 = document.form_ref.text_area;
var tx_lg = tx.length;
if (tx2.setSelectionRange) {
var sel = tx.substring(tx2.selectionStart, tx2.selectionEnd);
} else if (document.selection) {
var sel = document.selection.createRange().text;
}
var sel_lg = sel.length;
if ( typeof tx2.selectionStart != 'undefined' ) {
var pos = tx2.selectionStart;
} else if (document.selection) {
tx2.focus();
var range = tx2.createTextRange();
range.moveToBookmark(document.selection.createRange().getBookmark());
range.moveEnd('character', tx2.value.length);
var pos = tx2.value.length - range.text.length;
}
if (tx_lg > 0 && sel_lg > 0 && pos > -1) {
var texte_final = tx.substring(0, pos) + "{{" + tx.substring(pos, pos+sel_lg) + "}}" + tx.substring(pos+sel_lg, tx_lg);
document.form_ref.text_area.value = texte_final;
}
}

2 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
3 nov. 2009 à 07:32
Bonjour,
faire une seule fonction en passant en paramètre
les différences et en utilisant ces paramètres
dans la fonction
appel("a1","a2")
appel("b1","b2")
...
function appel(p1,p2)
{ ...instructions communes
  ...tx.substring(0, pos) + p1 + ... + p2 + ... par exemple
p1 vaudra "a1" ou "b1" et p2 "a2" ou "b2"
en fonction de l'appel
  instructions communes....
}
Cordialement [mon Site] [M'écrire] Bul
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 nov. 2009 à 18:24
Bonjour,

Merci de poster sur javascriptfr.com dans un thème javascript pour une question javascript.

[ Déplacé sur javascriptfr ]
0
Rejoignez-nous