es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Vue Textarea parcialmente estilizado

En mi aplicación tengo un textarea de bootstrap-vue con un texto dinámico como v-model. Quiero cambiar el color de fuente (font-color) y la negrita (font-weight) del texto mostrado dentro del textarea parcialmente. Ya sé cómo hacerlo fuera del textarea, pero dentro no logro entender cómo lograr esto. Por ejemplo:

data() {
return {
textareaText: ‘Ingresa tu NOMBRE y tu DIRECCIÓN aquí.’,
};
},

Y debe haber un método u otro enfoque para cambiar las palabras que están completamente escritas en mayúsculas a rojo y en negrita, y dejar el resto del texto en su formato normal. ¿Es posible hacer esto dentro del texto mostrado en el textarea?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible cambiar el color de fuente y el peso de fuente del texto mostrado dentro de un textarea parcialmente. Esto se debe a que el texto mostrado dentro de un textarea es texto plano y no admite etiquetas HTML ni estilos CSS.

    Sin embargo, una posible solución alternativa es usar un div con la propiedad contenteditable en lugar de un textarea. Con un div con contenteditable, puedes aplicar etiquetas HTML y estilos CSS al texto mostrado. Aquí tienes un ejemplo:

    <template>
      <div class="textarea" contenteditable="true" v-html="formattedText" @input="updateText"></div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          textareaText: 'Ingresa tu NOMBRE y tu DIRECCIÓN aquí.',
        };
      },
      computed: {
        formattedText() {
          return this.textareaText.replace(/([A-Z]{2,})/g, '<span style="color:red; font-weight:bold">$1</span>');
        }
      },
      methods: {
        updateText(event) {
          this.textareaText = event.target.innerHTML;
        }
      }
    }
    </script>
    
    <style>
    .textarea {
      border: 1px solid #ccc;
      padding: 10px;
      font-size: 16px;
    }
    </style>
    

    En este ejemplo, reemplazamos todas las palabras que están escritas completamente en mayúsculas con una etiqueta span con estilos color:red y font-weight:bold. Utilizamos una propiedad computada formattedText para generar el texto con formato HTML y lo enlazamos al div con contenteditable utilizando v-html. También escuchamos el evento input para actualizar la propiedad de datos textareaText cuando el usuario escribe en el div. Por último, agregamos algunos estilos CSS básicos al div para que se vea como un textarea.

Comments are closed.