Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Gestione delle selezioni e dei range...

    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...
    .:[Mr.Mime]:.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Cioe` tu hai fatto un'analisi molto puntuale e circostanziata del problema.
    Hai anche trovato la soluzione e la hai postata.

    Cosa e` la domanda?

    Forse devi solo inserire:
    if(document.all) {
    // soluzione per IE
    } else if(document.getElementById) {
    // soluzione per gecko (moderni non IE)
    } else {
    // soluzione impossibile
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Il mio problema, che forse effettivamente non emerge, è quello di dover ricreare anche nei browser gecko, lo stesso comportamento che execCommand attua su IE.

    Il discorso del range è solo un suggerimento perché analizzando sulla rete, credo sia la via da seguire (in quanto non posso fare per ragioni di sviluppo, un replace dei tag span).

    Però se qualcuno riesce a risolvere il problema con altri metodi, sono tutto orecchi.

    Aggiungo infine un'altra domanda.
    E' possibile conoscere, data una selezione, il codice sorgente che la coinvolge invece che il semplice testo?

    Ciao e alla prossima...
    .:[Mr.Mime]:.

  4. #4
    Per chi era interessato al problema (pochi credo dato il poco seguito) la soluzione era il lancio (nei browser Gecko) del comando:

    document.execCommand ("useCSS",false,true) prima del lancio degli execCommand di formattazione.
    In questo modo vengono messi i vari b, i ecc... invece che gli span.

    Ciao e alla prossima...
    .:[Mr.Mime]:.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.