2011-01-16 16 views
97

ho bisogno di essere in grado di rendere alcuni tag HTML all'interno di una textarea (vale a dire <forte>, <i>, <u>, <un>), ma textareas solo interpretare il loro contenuto come testo. C'è un modo semplice per farlo senza fare affidamento su librerie/plugin esterni (sto usando jQuery)? Se no, conosci qualche plugin jQuery che potrei usare per fare questo?rendering HTML all'interno textarea

+0

L'unico modo per farlo sarà quello di sovrapporre il tuo markup HTML sul contenuto del tag textarea tramite trucchi di posizionamento CSS. Niente ti aiuterà a convincere il browser a rendere diversamente il contenuto della textarea. (Perché esattamente "hai bisogno" di fare questo?) – Pointy

+0

Ho solo bisogno che l'utente sia in grado di aggiungere alcuni stili di formattazione al testo che inserisce (proprio come quando scrivi un articolo su Wordpress).Semplicemente non ho bisogno di tutte le funzioni come l'allineamento del testo e così via, ma solo quei tag di base. –

risposta

174

Questo non è possibile fare con un textarea. Quello che state cercando è un content editable div, che è molto presto fatto:

<div contenteditable="true"></div> 

jsFiddle

div.editable { 
 
    width: 300px; 
 
    height: 200px; 
 
    border: 1px solid #ccc; 
 
    padding: 5px; 
 
} 
 

 
strong { 
 
    font-weight: bold; 
 
}
<div contenteditable="true">This is the first line.<br> 
 
See, how the text fits here, also if<br>there is a <strong>linebreak</strong> at the end? 
 
<br>It works nicely. 
 
<br> 
 
<br><span style="color: lightgreen">Great</span>. 
 
</div>

+0

@Tim, in effetti lo è! A volte sei bloccato pensando a jQuery e finisci per renderlo più complicato di quanto deve essere. Ho aggiornato la mia risposta. Grazie per avermi illuminato :) – mekwall

+6

è un vero peccato che tu non possa praticamente usare questo senza l'uso di javascript per inviare le tue modifiche usando ajax o copiarle in un modulo di input. Se qualcuno avesse trovato il modo di farlo sarei davvero interessato! – Ben

+0

@TimDown e più breve: '

';) – yckart

19

Con un div modificabile è possibile utilizzare il metodo document.execCommand (more details) per fornire facilmente il supporto per i tag specificati e per alcune altre funzionalità.

#text { 
 
    width : 500px; 
 
\t min-height : 100px; 
 
\t border : 2px solid; 
 
}
<div id="text" contenteditable="true"></div> 
 
<button onclick="document.execCommand('bold');">toggle bold</button> 
 
<button onclick="document.execCommand('italic');">toggle italic</button> 
 
<button onclick="document.execCommand('underline');">toggle underline</button>

+0

Questo non funziona in alcuni browser aggiungendo semplicemente questo come nota AS '16 –

0

Ho lo stesso problema, ma in senso inverso, e la seguente soluzione. Voglio mettere html da un div in una textarea (in modo da poter modificare alcune reazioni sul mio sito, voglio avere la textarea nella stessa posizione.)

<div id="msg500">here some <strong>html</strong> <i>tags</i>.</div> 

di mettere il contenuto di questo div in un textarea Uso:

var content = $('#msg500').text(); 
$('#msg500').wrapInner('<textarea>'+content+'</textarea>'); 
0

Un addendum a questo. È possibile utilizzare le entità carattere (come la modifica di in &lt;div&gt;) e la renderizzazione nella textarea. Ma quando viene salvato, il valore della textarea è il testo come reso. Quindi non è necessario decodificare. Ho appena provato questo attraverso i browser (cioè indietro a 11).

+0

I mi piacerebbe davvero che funzionasse per me, ma non è così. Per esempio ' 'non viene visualizzato come HTML. Sono su Chrome 46. – sirdank

+0

Hm. Ho copiato quella stringa direttamente in un documento html e questo mi restituisce correttamente la markup in OS X 10.11.1 di Chrome Version 48.0.2552.0 dev (64-bit). Quindi forse è un problema di versione. – axlotl

+0

Non funziona neanche per me. –

1

provare questo esempio su JSFiddle

<style> 
.editable { 
    width: 300px; 
    height: 200px; 
    border: 1px solid #ccc; 
    padding: 5px; 
    resize: both; 
    overflow: auto; 
} 
</style> 

<div class="editable" contenteditable="true"></div> 
<button class="bold">toggle red</button> 
<button class="italic">toggle italic</button> 

<script> 
function toggleRed() { 
    var text = $('.editable').text(); 
    $('.editable').html('<p style="color:red">'+text+'</p>'); 
} 

function toggleItalic() { 
    var text = $('.editable').text(); 
    $('.editable').html("<i>"+text+"</i>"); 
} 

$('.bold').click(function() { 
    toggleRed(); 
}); 

$('.italic').click(function() { 
    toggleItalic(); 
}); 
</script> 

Edit by Jeffrey Crowder - Web Developer programmatore/Windows

ho aggiunto un violino JS del codice.

-2

questo è possibile con <textarea> l'unica cosa che dovete fare è usare Summernote WYSIWYG editor

interpreta i tag HTML all'interno di una textarea (vale a dire <strong>, <i>, <u>, <a>)

+0

Non usa textarea. Usa div, che non può essere inviato con un modulo. –

+0

Funziona con textarea, prova a dare id a textarea invece di div. Ho creato un intero progetto usando textarea e summernote. Funziona bene! –

+0

Qual è il punto? Si comporta come un ckeditor se viene utilizzata textarea. Impossibile eseguire il rendering di tag HTML come richiesto. –

Problemi correlati