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

    Editor di testo, passagio a codice HTML: div invece di br

    In un piccolo editor di testo tramte un tasto si passa dalla modalita testo alla modalita HTML, il problema e' che non gestisce correttamente "a capo". Il codice e' aprossimativamente questo:

    codice HTML:
    <iframe id="editArea" name="editArea" src="about:blank"></iframe>
    
    ...
    if =(document.getElementById(preview').value=="HTML")
    {
    var contenuto=AttivaFrame("editArea").body.innerHTML;
    contenuto=contenuto.replace(/\n/g,"<br\/\>")
    alert(contenuto);
    ....
    }
    Dunque invece di visualizzare il messaggio con i <br/> mi inserisce i <div>
    Come posso fare? Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    228
    Posta un esempio di ciò che ti stampa

  3. #3
    Ho risolto in parte il problema

    Quote Originariamente inviata da SimoX90 Visualizza il messaggio
    Posta un esempio di ciò che ti stampa
    Se scrivo:

    uno
    due
    tre
    mi risulta
    uno
    <div>due</div>
    <div>tre</div>
    Dunque ho cambiato IFRAME con il DIV

    codice HTML:
    <div contenteditable="True" id="editArea" name="editArea" style="width:100%;height:100%;background:#FFFFFF" src="about:blank" >Inserire in testo</div>
    E nel codice ho intercettato il tasto a capo
    codice:
    document.getElementById('editArea').onkeyup=doStuff;
    
    function doStuff(e)
    {
    if(e.keyCode == 13) {
      var s=document.getElementById("editArea").innerHTML;
      s=s.replace("<div>","<br/>").replace("</div>","\n");
      document.getElementById("editArea").innerHTML=s;
      }
    }
    Se digito
    uno <invio>
    unodue
    Il cursore torna ad affiancare il testo "uno" nonostante sono andato a capo ma comunque funziona!
    unodue<br/><br/>
    Però c'è un secondo problema:
    uno
    due
    tre
    In questo caso dopo aver allineato "due" in modo centrato, nel tentativo di andare a capo mi crea un'ulteriore div annidato, cioè

    codice:
     
     uno <br/>
    <div style="text-align: center;"><span style="font-size: 0.75em; line-height: 1.41em;">due</span>
    <div style="text-align: center;"><span style="font-size: 0.75em; line-height: 1.41em;">tre</span></div></div>
    Non voglio usare editor già esistenti, preferisco trovare la soluzione.

    Grazie

  4. #4
    Ho trovato il modo , cercando nella rete ho trovato il codice che mi serviva. Spiegherò come ho fatto.

  5. #5
    Il codice Javascript per prevenire i tag div per andare a capo è il seguente

    codice:
    var edit = AttivaFrame("editArea"); // editArea, ovvero il div dell'editor
    
    
    // aggiunge l'evento doStuff all'editor quando viene premuto un tasto
    if (typeof edit.addEventListener != "undefined") 
    {
      edit.addEventListener("keypress", doStuff, false);
    } else if (typeof edit.attachEvent != "undefined") 
    {
      edit.attachEvent("onkeypress", doStuff);
    }
    
    
    //funzione che intercetta gli eventi
    function doStuff(e)
    {
    
    
    var sel, range, br, addedBr = false;
    e = e || window.event;
    var charCode = e.which || e.keyCode;
    
    
    // se il tasto premuto è invio
    if(charCode == 13) 
      {
      if (typeof window.getSelection != "undefined") // con il metodo window
        {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) 
          {
            range = sel.getRangeAt(0);
            range.deleteContents();
    
    
            br = document.createElement("br");
            range.insertNode(br);
            range.setEndAfter(br);
            range.setStartAfter(br);
    
    
            br = document.createElement("br"); // aggiunto in quanto non va capo automaticamente
            range.insertNode(br);
            range.setEndAfter(br);
            range.setStartAfter(br);
    
    
            sel.removeAllRanges();
            sel.addRange(range);
            addedBr = true;
          }
        } 
        else if (typeof document.selection != "undefined") // con il metodo document
        {
          sel = document.selection;
          if (sel.createRange) 
          {
                    range = sel.createRange();
                    range.pasteHTML("<br/>");
                    range.pasteHTML("<br/>"); // aggiunto, da testare su altri browser
                    range.select();
                    addedBr = true;      
          }
        }
        // se il metodo ha successo evita la manipolazione predefinita del browser alla pressione del tasto
        if (addedBr) 
          {
          if (typeof e.preventDefault != "undefined") 
            {
            e.preventDefault();
            }
          else 
            {
            e.returnValue = false;
            }
          }
      }
    
    
    }

  6. #6
    codice HTML:
    <div contenteditable="True" id="editArea" name="editArea"  src="about:blank" >Inserire il testo</div>

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.