Un sencillo editor de texto
Para crear un sencillo editor de texto necesitamos un elemento <textarea>
cuyo valor es el texto que queremos editar.
<textarea id="Texto" rows="5">Sed ut perspiciatis ...... sequi nesciunt.</textarea>
Texto en negrita
Si queremos poner el texto seleccionado dentro de una etiqueta <strong>
hay que:
1. recuperar el valor del texto seleccionado. Para esto utilizamos las propiedades selectionStart
y selectionEnd
del texto seleccionado.
let desde = Texto.selectionStart; let hasta = Texto.selectionEnd; let elTexto = Texto.value; // Texto es el textarea; let sel = elTexto.substring(desde, hasta);
2. crear una cadena donde el texto seleccionado aparece entre etiquetas <strong>
<strong>el texto seleccionado</strong>
3. reemplazar el texto seleccionado con la nueva cadena de texto.
Para esto utilizamos el método setRangeText()
En el siguiente ejemplo además del elemento <textarea>
hay un botón <button id="bold">
. También hay un párafo <p id="resultado"></p>
cuyo innerHTML
es el valor del elemento <textarea>
. Quiero que al hacer clic en el botón, el texto seleccionado del <textarea>
aparezca entre etiquetas <strong>
. Al mismo tiempo voy a actualizar el innerHTML
del #resultado
.
<textarea id="Texto" rows="5">Sed ut perspiciatis ...... sequi nesciunt.</textarea>
<p><button id="bold">Bold</button></p>
<p id="resultado"></p>
function etiquetaStrong() {
//recuperar el valor del texto seleccionado
let desde = Texto.selectionStart;
let hasta = Texto.selectionEnd;
let elTexto = Texto.value;
let sel = elTexto.substring(desde, hasta);
// si hay algo seleccionado
if (sel.length > 0) {
/*reemplazar el texto seleccionado con una cadena
donde el texto seleccionado aparece entre etiquetas strong*/
Texto.setRangeText(`<strong>${sel}</strong>`,desde,hasta,'select');
// actualizar el innerHTML del resultado
resultado.innerHTML = Texto.value;
}
}
See the Pen Seleccionar texto y ponerlo en negrita*** by Gabi (@enxaneta) on CodePen.
Crear un encabezado
Si queremos crear un nuevo encabezado las cosas se complican un poco ya que, a diferencia de los elementos inline
como <strong>
un elemento <h1>
- por ejemplo – es un elemento block
. Recuerde que en el HTML hay un párafo <p id="resultado"></p>
dentro de cual ponemos como innerHTML
el valor del <textarea>
. Voy a cambiar este párrafo con un <div id="resultado"></div>
, y cada vez que actualice el valor del resultado voy a poner el valor del texto dentro de un párrafo:
resultado.innerHTML = `<p>${Texto.value}</p>`;
Para crear un nuevo encabezado, primero voy a cerrar el párrafo al inicio del texto seleccionado ( </p>
). A continuación voy a poner el texto seleccionado dentro de una etiqueta <h1>
y, al final voy a abrir un nuevo párrafo ( <p>
) para el texto que viene a continuación. La estructura del HTML será más o menos así:`</p><h1>${Texto_seleccionado}</h1><p>`
<div id="resultado"> <p>. . . . .</p> <h1> Texto_seleccionado </h1> <p>. . . . .</p> </div>
See the Pen Crear un nuevo encabezado*** by Gabi (@enxaneta) on CodePen.
A continuación viene un ejemplo que me permite poner texto en negrita y añadir encabezados a la vez.
See the Pen Crear un sencillo editor de texto*** by Gabi (@enxaneta) on CodePen.