Wie entferne ich Leerzeichen, wenn ich Text mit jQuery greife?

183

Ich möchte jQuery verwenden, um einen Mailto: -Anker um eine E-Mail-Adresse zu wickeln, aber es greift auch den vom CMS generierten Leerraum auf.

Hier ist der HTML-Code, mit dem ich arbeiten muss, das Skript, wie ich es habe, und eine Kopie der Ausgabe.

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

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

Obwohl ich vermute, dass andere, die diese Frage lesen, möglicherweise nur das führende und hintere Leerzeichen entfernen möchten, bin ich ziemlich glücklich, das gesamte Leerzeichen zu verlieren, wenn man bedenkt, dass es sich um eine E-Mail-Adresse handelt, die ich verpacke.

Steve Perks
quelle
Mögliches Duplikat: stackoverflow.com/questions/10800355/…
The Unknown Dev

Antworten:

333

Verwenden Sie die replaceFunktion in js:

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

Dadurch werden alle Leerzeichen entfernt

Wenn Sie nur das führende und das nachfolgende Leerzeichen entfernen möchten , verwenden Sie die Methode jQuery $ .trim:

var emailAdd = $.trim($(this).text());
Andreas Grech
quelle
11
Richtig, aber / \ s / g wäre ein klareres Muster (das "i" ist redundant und das '' ist eine ungewöhnliche Form - auch wenn ein Muster von / (^ \ s *) | (\ s * $) / g ist äquivalent zu trimmen.
annakata
1
Sie sind richtig annakata, ich habe das / i entfernt, weil es redundant ist, da Groß- und Kleinschreibung in diesem Fall kein Problem darstellt
Andreas Grech
6
Eine Sache, vor der man vorsichtig sein sollte, ist, dass der IE nicht unterbrechende Leerzeichen (& nbsp;, & # 160;, & # xA0;, \ xA0, \ u00A0 usw.) nicht als Leerzeichen betrachtet, also / [ \ s \ xA0] + / g ist möglicherweise zuverlässiger, um alle Leerzeichen zu ersetzen.
Travis
100

Javascript hat Trim eingebaut:

str.trim()

In IE8 funktioniert es nicht. Wenn Sie ältere Browser unterstützen müssen, verwenden Sie die Antwort von Tuxmentat oder Paul .

Jhankar Mahbub
quelle
69

Tatsächlich verfügt jQuery über eine integrierte Trimmfunktion:

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

Siehe hier für Details.

Tuxmentat
quelle
3
weil jedes eingebaute Feature einen jQuery-Wrapper haben muss
jasonszhao
24

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

Paul
quelle
1
Dadurch werden führende und nachfolgende Leerzeichen wie bei der PHP-Trimmfunktion entfernt.
Paul
1
kannst du dich erklären
Francisco Corrales Morales
1
@FranciscoCorralesMorales: Ich denke, Sie haben hier die Wahl: Erfahren Sie mehr über reguläre Ausdrücke oder nicht. Wenn Sie dies tun, wird der Ausdruck selbstverständlich, und wenn Sie dies nicht tun, ist es schwer zu erklären, so dass es leicht zu verstehen ist. Also: Erfahren Sie mehr über reguläre Ausdrücke. Wenn Sie nach dem Versuch, sie zu lernen, immer noch nicht verstehen, stellen Sie eine bestimmte Frage zu genau dem, was Sie nicht verstehen.
Peter V. Mørch
5
Wie kann etwas, das so aussieht / ^ \ s + | \ s + $ / g, als "normal" bezeichnet werden?
RyanNerd
Sie werden reguläre Ausdrücke genannt, weil sie reguläre Sprachen beschreiben können, Sprachen, die mit einer Finite-State-Maschine analysiert werden können. Reguläre Ausdrücke in ihrer reinsten Form sind in der Tat eine Möglichkeit, eine endliche Zustandsmaschine zu beschreiben. In Anbetracht dessen, wie schwierig es wäre, ein Diagramm eines Automaten so in Ihren Code aufzunehmen, dass der Computer es verstehen könnte, sind reguläre Ausdrücke ziemlich beeindruckend, selbst wenn ihre Knappheit es für Menschen ziemlich schwierig macht, sie zu analysieren.
QuantumOmega