Как убрать пробел при получении текста с помощью jQuery?

183

Я хочу использовать jQuery, чтобы обернуть якорь mailto: вокруг адреса электронной почты, но он также захватывает пустое пространство, которое генерирует CMS.

Вот HTML-код, с которым мне нужно работать, сценарий, который у меня есть, и копия вывода.

HTML

<div class="field field-type-text field-field-email">
  <div class="field-item">
    name@example.com    </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

<div class="field field-type-text field-field-email">
  <div class="field-items"><a href="mailto:%0A%20%20%20%20name@example.com%20%20%20%20">
    name@example.com    </a></div>
</div>

Хотя я подозреваю, что другие, читающие этот вопрос, возможно, захотят просто убрать начальные и хвостовые пробелы, я очень рад потерять все пробелы, учитывая, что я обертываю адрес электронной почты.

Стив Перкс
источник
Возможный дубликат: stackoverflow.com/questions/10800355/…
The Unknown Dev

Ответы:

333

Используйте replaceфункцию в js:

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

Это удалит все пробелы

Если вы хотите удалить только начальные и конечные пробелы , используйте метод jQuery $ .trim:

var emailAdd = $.trim($(this).text());
Андреас Греч
источник
11
Правильно, но / \ s / g будет более понятным шаблоном («i» является избыточным, а «» - необычной формой - также есть шаблон / (^ \ s *) | (\ s * $) / g эквивалентно отделке.
annakata
1
Вы верны, аннаката, я удалил / i, потому что он избыточен, поскольку чувствительность к регистру в этом случае не проблема
Andreas Grech
6
Следует опасаться, что IE не рассматривает неразрывные пробелы (& nbsp ;, & # 160 ;, & # xA0 ;, \ xA0, \ u00A0 и т. Д. ...) как пробел, поэтому / [ \ s \ xA0] + / g может быть более надежным для замены всего пробела.
Трэвис
100

Javascript имеет встроенную отделку:

str.trim()

Это не работает в IE8. Если вам нужно поддерживать старые браузеры, используйте ответ Tuxmentat или Paul .

Джанкар Махбуб
источник
69

На самом деле, jQuery имеет встроенную функцию обрезки:

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

Смотрите здесь для деталей.

Tuxmentat
источник
3
потому что каждая встроенная функция должна иметь оболочку jQuery
jasonszhao
24

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

Павел
источник
1
Это удаляет начальные и конечные пробелы, такие как функция обрезки PHP.
Paul
1
можешь объяснить?
Франциско Корралес Моралес
1
@FranciscoCorralesMorales: я думаю, у вас есть выбор: узнавать о регулярных выражениях или нет. Если вы это сделаете, выражение станет самоочевидным, и если вы этого не сделаете, это будет трудно объяснить, поэтому его легко понять. Итак: узнайте о регулярных выражениях. Если вы все еще не понимаете, пытаясь выучить их, задайте конкретный вопрос о том, что именно вы не понимаете.
Питер В. Мёрч
5
Как можно назвать что-либо похожее на это / ^ \ s + | \ s + $ / g "обычным"?
RyanNerd
Их называют регулярными выражениями, потому что они могут описывать обычные языки, языки, которые можно анализировать с помощью конечного автомата. Регулярные выражения в самом чистом виде фактически являются способом описания конечного автомата. Учитывая, как трудно было бы включить диаграмму автомата в ваш код так, чтобы компьютер мог ее понять, регулярные выражения довольно удивительны, даже если их краткость может затруднить их анализ для людей.
QuantumOmega