Aiuto miglioramento funzione per inserimento BBCode in textarea

Sevenjeak

Utente Attivo
27 Nov 2012
80
2
8
32
sevenjeak.altervista.org
Tempo fa, ho realizzato, prendendo spunto da internet o realizzando il codice da zero, non ricordo bene, una funzione per l'inserimento del BBCode in una textarea:

Codice:
function addBBCode(str)
{
   var el = document.getElementById("comment");
  
   switch (str) {
      case "list":
         var li = new Array();
         var tmp = null;
         var i = 0;
         
         str = "[ list ]\n";
         
         do {
            tmp = prompt("Inserisci un'elemento della lista\nLascia la casella vuota o premi annulla per completare la lista.");
            
            if (tmp == "") tmp = null;
            if (tmp != "" && tmp != null) li[i] = tmp;
            i++
         } while (tmp != null);
         
         for (i = 0; i < li.length; i++) {
            str += "  [ * ]" + li[i] + "\n";
         }
         
         str += "[/ list ]";
      break;
      case "list1":
         var li = new Array();
         var tmp = null;
         var i = 0;
         
         str = "[ list='1' ]\n";
         
         do {
            tmp = prompt("Inserisci un'elemento della lista\nLascia la casella vuota o premi annulla per completare la lista.");
            
            if (tmp == "") tmp = null;
            if (tmp != "" && tmp != null) li[i] = tmp;
            i++
         } while (tmp != null);
         
         for (i = 0; i < li.length; i++) {
            str += "  [ * ]" + li[i] + "\n";
         }
         str += "[ /list ]";
      break;
      case "link":
         var url = "";
         var txt = "";
         
         url = prompt("Scrivi l'indirizzo del link.", "http://");
         
         if (url == "" || url == null) {
            return false;
         }else {
            if (el.selectionStart != null) {
               txt = prompt("Scrivi il testo del link.\nLascia il campo vuoto o premu Anulla per inserire lo stesso testo dell'indirizzo.", el.value.substring(el.selectionStart, el.selectionEnd));
            }else {
               txt = prompt("Scrivi il testo del link.\nLascia il campo vuoto o premu Anulla per inserire lo stesso testo dell'indirizzo.");
            }
            
            if (txt == "" || txt == null) txt = url;
            
            str = "[ url='" + url + "' ]" + txt + "[ /url ]";
         }
      break;
      case "mail": 
         var adress = "";
         
         if (el.selectionStart != null) {
            adress = prompt("Scrivi l'indirizzo email.", el.value.substring(el.selectionStart, el.selectionEnd));
         }else {
            adress = prompt("Scrivi l'indirizzo email.");
         }
         
         if (adress == "" || adress == null) {
            return false;
         }else {
            str = "[ mail ]" + adress + "[ /mail ]";
         }
      break;
      case "img":
         var adress = "";
         
         adress = prompt("Scrivi l'indirizzo dell'immagine.");
         
         if (adress != "" && adress != null) {
            str = "[ img ]" + adress + "[ /img ]";
         }else {
            return false;
         }
      break;
   }
   
   if (el.selectionStart != null) {
      var start = el.selectionStart;
      var end = el.selectionEnd;
		
      el.value = el.value.substring(0, start) + str.replace('%s', el.value.substring(start, end)) + el.value.substring(end);
   }else if (el.selection != null) {
      var range = document.selection.createRange();
      var range = _window.document.selection.createRange();
      var stored_range = range.duplicate();
	    
      stored_range.moveToElementText(el);
      stored_range.setEndPoint('EndToEnd', range);
	    
      var start = stored_range.text.length - range.text.length;
      var end = start + range.text.length;
		
      el.value = el.value.substring(0, start) + str.replace('%s', el.value.substring(start, end)) + el.value.substring(end);
   }else {
      el.value = el.value + str.replace('%s', '');
   }
}

In realtà rispetto a quella che avevo realizzato tempo fa lo modificata permettendo l'inserimento delle liste, del tag [ img ], e altri.., in poche parole, la funzione se richiamata, ad esempio in questo modo:

addBBCode("[ b ]%s[ /b ]")

Inserisce il codice desiderato dove si trova il cursore, con all'interno il testo selezionato se c'è ne bisogno.

Scrivo questa nuova discussione per sapere se la funzione qui sopra, secondo voi, può essere migliorata? se si come?

In'oltre, cosa fondamentale, per il qui scrivo questo messaggio, è che vorrei sapere, come è possibile far posizionare il mouse all'interno dei tag BBCode, una volta che la funzione gli a inseriti? non so se mi sono spiegato.

P.S.: Ho inserito degli spazi, che in realtà non ci sono, tra i tag che ho scritto, per evitare che mi venissero interpretati dal forum.
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
come è possibile far posizionare il mouse all'interno dei tag BBCode
prova a inserire queste righe alla fine della tua funzione
Codice:
var str_end = str.split("s");
var start = el.selectionStart;
el.selectionStart = start - str_end[1].length;
el.selectionEnd = start - str_end[1].length;
el.focus ();
ho testato solo con FF12 e IE9 e con i tag [ b ] [ /b ] da te postati
a te il collaudo degli altri :fonzie:
il prompt non mi funziona ma non ho verificato bene
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Aiuto per rendere un Bot Telegram Privato PHP 0
M Un aiuto da chi ha apple Mac e Software 0
P Richiesta di aiuto Presentati al Forum 1
A Aiuto per pagina php PHP 0
M Questa pagina non carica correttamente Google Maps: aiuto!! HTML e CSS 1
I Aiuto php Dependent Lookup PHP 0
R Aiuto con le query MS Access 2
M AIUTO ESERCIZIO JAVA Javascript 1
G Aiuto con htaccess e rewriterule PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
M Aiuto con inserimento immagini WordPress 6
D aiuto schermata photoshop Photoshop 0
L Aiuto per programma web php/mySQL PHP 2
A Aiuto php colore diverso PHP 10
L Aiuto creazione menu mancante WordPress 0
C Aiuto compiuto scuola PHP/MySQL PHP 2
G Insert into select - Aiuto MySQL 0
I Aiuto bash linux Programmazione 1
F Aiuto java script Javascript 2
R Cerco aiuto Offerte e Richieste di Lavoro e/o Collaborazione 7
I Aiuto query MySQL 8
G Aiuto HTML, collegamento con un bottone a una <div> di un' altra pagna HTML e CSS 5
R Aiuto sito html Offerte e Richieste di Lavoro e/o Collaborazione 3
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
G Mi dite come faccio? Aiuto photoshop ? Photoshop 1
C prestashop paragamento contrassegno aiuto modulo E-Commerce 0
Michelebozzo [PHP] Rimuovere pubblicazione nome pagina ... aiuto! PHP 7
Caldus richiesta aiuto Mac e Software 0
R [Javascript] Aiuto su questo script Javascript 2
Z Gestionale in Php/mysql: Quanto farsi pagare? Aiuto! Discussioni Varie 0
Giacomo92 [HTML] AIUTO!! Regular Expression :( Offerte e Richieste di Lavoro e/o Collaborazione 15
T Aiuto per php7 e mysqli PHP 3
T mysql tutorial per importare tabelle access in mysql aiuto MySQL 2
K [Java] aiuto switch case Java 1
E salve tutti spero si essere di aiuto e di trovare aiuto Presentati al Forum 2
D [MS Access] aiuto non riesco a capire MS Access 6
P [PHP] Browser game, aiuto a tempo libero. Offerte e Richieste di Lavoro e/o Collaborazione 0
wildcity9 aiuto per sbloccare account instagram bannati Social Media Marketing 0
A Aiuto per configurare il banner di Iubenda su un sito in html HTML e CSS 0
I Aiuto Firma App Sviluppo app per Android 0
C [PHP] Chiedo un aiuto, Array multidimensionale. PHP 3
H [Javascript] aiuto favore Javascript 1
T [PHP] aiuto....Fatal error: Uncaught Error:non riesco a capire PHP 1
N [PHP] Aiuto PHP 1
M [PHP] Aiuto su inner join PHP 10
S [PHP] Aiuto creazione form php per completamento modello word PHP 1
Giatenx Ho bisogno di aiuto Annunci servizi di Social Media Marketing 1
Z [HTML] aiuto per visualizzazione su tablet Offerte e Richieste di Lavoro e/o Collaborazione 6
Z sono qui in cerca di aiuto Presentati al Forum 2
andreasuriani Aiuto script java Ajax 1

Discussioni simili