Salve a tutti.
In questi ultimi tempi sto veramente sbattendo la testa su un problema che non riesco a risolvere ovvero la corretta gestione dei range derivati da selezioni e l'applicazioni dei comuni tag di formattazione.
Come sapete nei comuni editor WYSIWYG in javascript, l'applicazioni di effetti come BOLD, ITALIC ecc... viene fatta con l'ausilio del comando execCommand.
Tale comando è molto potente perché riscrive automaticamente i tag secondo quanto richiesto. Es:
Testo originale:
Pippo è simpatico e goffo;
Poniamo di selezionare "tico e goffo" e di applicarci un ITALIC.
Il risultato finale della execCommand sarà qualcosa come:
Pippo è simpatico e goffo;
In pratica lui gestisce automaticamente anche le intersezioni tra i tag.
La cosa è molto bella se non fosse che tale comando ha due comportamenti distinti sui Gecko e su IE.
Nel primo caso vengono utilizzati degli SPAN con gli opportuni attributi in Style.
Nel secondo vengono usati le varianti STRONG, EM ecc...
Ora. Nel famoso editor tinyMCE tale inconveniente non succede in quanto anche in Firefox/Mozilla, l'applicazione di execCommand restituisce STRONG, EM ecc..
Ho postato sul loro forum per tentare di farmi spiegare come facessero e mi sono spulciato il codice sorgente ma non ho ricevuto/trovato la soluzione.
Come posso quindi ottenere un tale risultato anche, eventualmente, senza l'abblicazione di execCommand ma manipolando manualmente il range?
Per gli interessati, ricordo che per creare un range in Firefox occorre usare la seguente funzione:
codice:
var selection = getSel (rte);
var newRange = selection.getRangeAt(0);
dove getSel è la seguente funzione:
codice:
function getSel()
{
var txt = '';
if (window.getSelection)
txt = window.getSelection();
else if (document.getSelection)
txt = document.getSelection();
else if (document.selection)
txt = document.selection.createRange().text;
else return;
return txt;
}
Spero possiate aiutarmi.
Ho trovato a questo indirizzo, un comodo (anche se in inglese) elenco di funzioni e methodi applicabili ai range:
http://www.dotvoid.com/view.php?id=11
Grazie e alla prossima...