¿Cómo elimino el espacio en blanco al tomar texto con jQuery?

183

Quiero usar jQuery para envolver un mailto: ancla alrededor de una dirección de correo electrónico, pero también está tomando el espacio en blanco que está generando el CMS.

Aquí está el HTML con el que tengo que trabajar, el script tal como lo tengo y una copia de la salida.

HTML

<div class="field field-type-text field-field-email">
  <div class="field-item">
    [email protected]    </div>
</div>

jQuery JavaScript

$(document).ready(function(){
  $('div.field-field-email .field-item').each(function(){
    var emailAdd = $(this).text();
      $(this).wrapInner('<a href="mailto:' + emailAdd + '"></a>');
   });
 });

HTML generado

<div class="field field-type-text field-field-email">
  <div class="field-items"><a href="mailto:%0A%20%20%20%[email protected]%20%20%20%20">
    [email protected]    </a></div>
</div>

Aunque sospecho que otras personas que lean esta pregunta tal vez quieran eliminar el espacio en blanco inicial y secundario, estoy bastante feliz de perder todo el espacio en blanco considerando que es una dirección de correo electrónico que estoy envolviendo.

Steve Perks
fuente
Posible duplicado: stackoverflow.com/questions/10800355/…
The Unknown Dev

Respuestas:

333

Use la replacefunción en js:

var emailAdd = $(this).text().replace(/ /g,'');

Eso eliminará todos los espacios

Si desea eliminar solo los espacios en blanco iniciales y finales , use el método jQuery $ .trim:

var emailAdd = $.trim($(this).text());
Andreas Grech
fuente
11
Correcto, pero / \ s / g sería un patrón más claro (la "i" es redundante y el '' es una forma inusual; también aparece un patrón de / (^ \ s *) | (\ s * $) / g es equivalente a recortar.
annakata
1
Estás en lo correcto annakata, eliminé el / i porque es redundante ya que la sensibilidad a mayúsculas y minúsculas en este caso no es un problema
Andreas Grech
66
Una cosa a tener en cuenta es que IE no considera los espacios que no se rompen (& nbsp ;, & # 160 ;, & # xA0 ;, \ xA0, \ u00A0, etc.) como espacios en blanco, entonces / [ \ s \ xA0] + / g podría ser más confiable para reemplazar todos los espacios en blanco.
travis
100

Javascript ha incorporado en el ajuste:

str.trim()

No funciona en IE8. Si tiene que admitir navegadores antiguos, use la respuesta de Tuxmentat o de Paul .

Jhankar Mahbub
fuente
69

En realidad, jQuery tiene una función de recorte incorporada:

 var emailAdd = jQuery.trim($(this).text());

Ver aquí para más detalles.

Tuxmentat
fuente
3
porque cada función incorporada debe tener un contenedor jQuery
jasonszhao
24

str=str.replace(/^\s+|\s+$/g,'');

Pablo
fuente
1
Esto elimina los espacios en blanco iniciales y finales, como la función de recorte de PHP.
Paul
1
puedes explicarte?
Francisco Corrales Morales
1
@FranciscoCorralesMorales: Creo que tienes una opción aquí: aprender sobre expresiones regulares o no. Si lo hace, la expresión se hará evidente, y si no lo hace, será difícil de explicar, por lo que es fácil de entender. Entonces: Aprenda sobre expresiones regulares. Si aún no comprende después de intentar aprenderlos, haga una pregunta específica sobre exactamente lo que no comprende.
Peter V. Mørch
55
¿Cómo se puede llamar "regular" a algo que se parece a esto / ^ \ s + | \ s + $ / g?
RyanNerd el
Se llaman expresiones regulares porque pueden describir lenguajes regulares, lenguajes que pueden analizarse usando una máquina de estados finitos. Las expresiones regulares, en su forma más pura, son de hecho una forma de describir una máquina de estados finitos. Teniendo en cuenta lo difícil que sería incluir un diagrama de un autómata en su código de una manera que la computadora pudiera entender, las expresiones regulares son bastante impresionantes, incluso si su brevedad puede hacer que sea bastante difícil de analizar para los humanos.
QuantumOmega