2011-01-16 22 views
97

tengo que ser capaz de hacer que algunas etiquetas HTML dentro de un área de texto (es decir, <fuerte>, <i>, <u>, <un>), pero las áreas de texto sólo interpretar su contenido como texto. ¿Existe una manera fácil de hacerlo sin depender de librerías/plugins externos (estoy usando jQuery)? Si no, ¿sabe de algún complemento de jQuery que pueda utilizar para hacer esto?representación HTML dentro de área de texto

+0

La única manera de hacerlo eso será superponer su marcado HTML sobre el contenido de la etiqueta textarea a través de trucos de posicionamiento de CSS. Nada lo ayudará a convencer al navegador para que represente los contenidos de la tabla de texto de manera diferente. (¿Por qué exactamente "necesitas" hacer esto?) – Pointy

+0

Solo necesito que el usuario pueda agregar algunos estilos de formateo al texto que ingresa (como cuando escribes un artículo en Wordpress).Simplemente no necesito todas las características, como alineación de texto, etc., sino solo esas etiquetas básicas. –

Respuesta

174

Esto no es posible con un textarea. Lo que se busca es un div content editable, que se realiza muy fácilmente:

<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, de hecho lo es! A veces estás atrapado pensando jQuery y terminas haciéndolo más complicado de lo que debe ser. He actualizado mi respuesta. Gracias por iluminarme :) – mekwall

+6

es una verdadera lástima que no puedas usar esto prácticamente sin el uso de javascript para enviar tus cambios usando ajax o copiarlos en un formulario de entrada. ¡Si alguien ha encontrado la forma de hacerlo, estaría realmente interesado! – Ben

+0

@TimDown y más corto: '

';) – yckart

19

Con un div editable puede utilizar el método document.execCommand (more details) para proporcionar fácilmente el soporte para las etiquetas que ha especificado y para algunas otras funcionalidades.

#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

Esto no funciona en algunos navegadores simplemente agregando esto como una nota COMO de '16 –

0

que tienen el mismo problema, pero a la inversa, y la solución siguiente. Quiero poner html de un div en un área de texto (para que pueda editar algunas reacciones en mi sitio web; quiero tener el área de texto en la misma ubicación.)

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

Para poner el contenido de este div en una textarea Yo uso:

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

Un adendo a esto. Puede usar entidades de caracteres (como cambiar <div> a &lt;div&gt;) y se mostrarán en el área de texto. Pero cuando se guarda, el valor de textarea es el texto como se representa. Entonces no necesitas descifrar. Acabo de probar esto en todos los navegadores (es decir, de vuelta a 11).

+0

I Realmente me gustaría que esto funcione para mí, pero no fue así. Por ejemplo ' 'no se muestra como HTML. Estoy en Chrome 46. – sirdank

+0

Hm. Copié y pegué esa cadena directamente en un documento html y me muestra el marcado correctamente en Chrome Version 48.0.2552.0 dev (64-bit) OS X 10.11.1. Entonces tal vez es un problema de versión. – axlotl

+0

No funciona para mí tampoco. –

1

probar este ejemplo en 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> 

Editar por Jeffrey Crowder - Desarrollo Web/Windows programador

que añade un violín de JS del código.

-2

Esto es posible con <textarea> la única cosa que hay que hacer es usar Summernote WYSIWYG editor

interpreta etiquetas HTML dentro de un área de texto (es decir, <strong>, <i>, <u>, <a>)

+0

No usa textarea. Utiliza div, que no se puede enviar con un formulario. –

+0

Funciona con textarea, solo intenta dar ID a textarea en lugar de div. Creé un proyecto completo usando textarea y summernote. ¡Funciona bien! –

+0

¿Cuál es el punto? Se comporta igual que ckeditor si se usa textarea. No se pueden procesar etiquetas HTML como se le pidió. –

Cuestiones relacionadas