jak usunąć białe znaki podczas pobierania tekstu za pomocą jQuery?

183

Chcę użyć jQuery do zawinięcia mailto: zakotwiczenia wokół adresu e-mail, ale również chwyta białą przestrzeń generowaną przez CMS.

Oto HTML, z którym muszę pracować, skrypt, jaki mam, i kopia wyniku.

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>');
   });
 });

Wygenerowany HTML

<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>

Chociaż podejrzewam, że inni czytający to pytanie mogą chcieć po prostu usunąć początkowe i końcowe białe znaki, cieszę się, że straciłem wszystkie białe znaki, ponieważ to adres e-mail, który zawijam.

Steve Perks
źródło
Możliwy duplikat: stackoverflow.com/questions/10800355/…
The Unknown Dev

Odpowiedzi:

333

Użyj replacefunkcji w js:

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

Spowoduje to usunięcie wszystkich spacji

Jeśli chcesz usunąć tylko początkowe i końcowe białe znaki , użyj metody jQuery $ .trim:

var emailAdd = $.trim($(this).text());
Andreas Grech
źródło
11
Prawidłowe, ale / \ s / g byłoby bardziej przejrzystym wzorem („i” jest zbędne, a „” jest nietypową formą - również fwiw wzór / (^ \ s *) | (\ s * $) / g jest odpowiednik wykończenia
annakata,
1
Masz rację annakata, usunąłem / i, ponieważ jest redundantny, ponieważ rozróżnianie wielkości liter w tym przypadku nie jest problemem
Andreas Grech
6
Jedną rzeczą, na którą należy uważać, jest to, że IE nie uważa, że ​​spacje nierozdzielające (& nbsp ;, & # 160 ;, & # xA0 ;, \ xA0, \ u00A0 itp.) ... jako spacje, więc / [ \ s \ xA0] + / g może być bardziej niezawodny do zastąpienia wszystkich białych znaków.
travis
100

JavaScript ma wbudowane wykończenie:

str.trim()

Nie działa w IE8. Jeśli musisz obsługiwać starsze przeglądarki, skorzystaj z odpowiedzi Tuxmentata lub Paula .

Jhankar Mahbub
źródło
69

W rzeczywistości jQuery ma wbudowaną funkcję przycinania:

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

Zobacz tutaj, aby uzyskać szczegółowe informacje.

Tuxmentat
źródło
3
ponieważ każda wbudowana funkcja musi mieć opakowanie jQuery
jasonszhao
24

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

Paweł
źródło
1
To usuwa wiodące i końcowe białe znaki, takie jak funkcja przycinania PHP.
Paul
1
potrafisz się wyjaśnić?
Francisco Corrales Morales
1
@FranciscoCorralesMorales: Myślę, że masz tutaj wybór: dowiedz się o wyrażeniach regularnych lub nie. Jeśli to zrobisz, wyrażenie stanie się oczywiste, a jeśli tego nie zrobisz, trudno będzie to wytłumaczyć, aby łatwo było je zrozumieć. Więc: Dowiedz się o wyrażeniach regularnych. Jeśli nadal nie rozumiesz po próbie ich nauczenia, zadaj konkretne pytanie dotyczące dokładnie tego, czego nie rozumiesz.
Peter V. Mørch
5
Jak cokolwiek, co wygląda tak / ^ \ s + | \ s + $ / g, można nazwać „zwykłym”?
RyanNerd
Nazywa się je wyrażeniami regularnymi, ponieważ mogą opisywać języki regularne, które można analizować za pomocą maszyny o stanie skończonym. Wyrażenia regularne, w najczystszej postaci, są w rzeczywistości sposobem na opisanie maszyny o skończonym stanie. Biorąc pod uwagę, jak trudno byłoby dołączyć schemat automatu do kodu w sposób zrozumiały dla komputera, wyrażenia regularne są dość niesamowite, nawet jeśli ich zwięzłość może sprawić, że będą one trudne do przeanalizowania dla ludzi.
QuantumOmega