simartinez007
Messages postés12Date d'inscriptionjeudi 8 janvier 2009StatutMembreDernière intervention 3 novembre 2009
-
3 nov. 2009 à 04:51
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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;
}
}
A voir également:
Comment réduire un code-source en javascript très répétitif ?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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....
}