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

Signaler
Messages postés
12
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 novembre 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
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
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Bonjour,

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

[ Déplacé sur javascriptfr ]