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.

El filtro de Vue no debe tener en cuenta los códigos y etiquetas HTML en el recuento.

A continuación se muestra mi filtro Vue aplicado a v-html:

msg = "<p>no tengo comp de donde</p>\n"

<h2 v-html="this.$options.filters.limitText(msg)">
</h2>

filters: {
  limitText: function (val) {
    if (val && (val.length > 28)) {
      return (val.substring(0, 28).replace(/\s\S*$/, '') + ' ...')
    }
    return val;
  }
}

Los siguientes problemas deben resolverse en este filtro:

  1. También considera como 7 caracteres en su conteo de caracteres para la subcadena. Como se convertirá en solo ', debería considerarse solo un caracter. Aleatoriamente puedo obtener diferentes códigos en el texto en lugar de .

  2. Considera la etiqueta “, <p> como tres caracteres en su conteo de caracteres. Esta etiqueta <p> debe omitirse en el conteo. Puedo obtener diferentes etiquetas HTML en lugar de <p>, esas etiquetas no deben considerarse en el conteo de caracteres para la subcadena.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Problemas con el filtro Vue en el código dado

    El filtro Vue aplicado a v-html en el código tiene los siguientes problemas:

    1. Considera &#8217; como 7 caracteres en su cuenta de caracteres para la subcadena. Como este código se convertirá en ', debería considerarse como un solo carácter. Pueden haber varios otros códigos en el texto en lugar de &#8217;.
    2. Considera la etiqueta p, <p>, como tres caracteres en su cuenta de caracteres. Esta etiqueta debe ser omitida en la cuenta. Otras etiquetas HTML pueden estar presentes en lugar de la etiqueta p, y esas etiquetas no deben ser consideradas en la cuenta de caracteres para la subcadena.

    Soluciones

    1. Para resolver el primer problema, podemos reemplazar el código &#8217; por el carácter correspondiente antes de pasar val a la función de subcadena. Esto se puede lograr utilizando la función replace() para reemplazar &#8217; por '. Por ejemplo:

      val = val.replace(/&#8217;/g, "'");
      

      Con este cambio, la cuenta de caracteres para val será precisa y la función de subcadena devolverá el resultado deseado.

    2. Para resolver el segundo problema, debemos identificar y excluir las etiquetas HTML de la cuenta de caracteres. Una forma de lograr esto es utilizar Expresiones Regulares para buscar y eliminar las etiquetas HTML de la cadena antes de la operación de subcadena. Por ejemplo:

      val = val.replace(/<[^>]+>/g, '');
      

      Esto eliminará todas las etiquetas HTML de la cadena antes de realizar la operación de subcadena, asegurando que la cuenta de caracteres sea precisa.

    Con estos cambios, el filtro Vue funcionará correctamente y dará el resultado deseado.

Comments are closed.