Обрезать пробелы перед текстом в javascript

#javascript #jquery #whitespace #trim

#javascript #jquery #пробелы #обрезать

Вопрос:

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

Цель: обрезать пробелы до и после слова, заданного в поле DIV.

Проблема: все работает нормально, пока перед словом НЕТ пробелов! В DIV уже может быть текст, это может быть пустой DIV, в который можно вставить текст.

Я пытался использовать javascript в DIV, например, trim (this), но это не сработало. Даже в самом скрипте я не пробовал ни $.trim(редактируемый OBJ.innerHTML) , ни editableObj.innerHTML.trim()

Ничего не работает!

JS

 <script>
function showEdit(editableObj) {
  $(editableObj).css("background", "#FFF");
}

function saveToDatabase(editableObj, column, linkmainid, nav, linkid) {
  $(editableObj).css("background", "#FFF url(loaderIcon.gif) no-repeat right");
  $.ajax({
    url: 'save' nav '.php',
    type: "POST",
    data: 'linkcat='   column   'amp;linktitle='   editableObj.innerHTML   'amp;linkmainid='   linkmainid   'amp;action='   nav   'amp;linkid='   linkid,
    success: function(data) {
      $(editableObj).css("background", "#FDFDFD");

      window.location="/website/cms/menu.php";
    }
  });
}
  

HTML

 <div class="navnew" contenteditable="true" onBlur="saveToDatabase(this,'1','999999','navnew','111')" onClick="showEdit(this);"></div>
  

Комментарии:

1. Взгляните на документы для .trim() . Trim вызывается для строки без параметров.

2. Ваш код ошибочен. Для URL-адреса вы захотите использовать encodeURIComponent() around nav . Для ваших данных вы можете / должны использовать стандартный объект JavaScript и позволить jQuery кодировать данные за вас. В противном случае данные не будут экранированы должным образом и приведут к другим проблемам.

3. Если вас интересует только текст (без другого html), попробуйте textContent вместо innerHTML

Ответ №1:

 var stringWithLeadingSpaces = "        hello world!"
var trimmedString = stringWithLeadingSpaces.trim();
console.log(trimmedString); //logs "hello world!"
  

обрезать

Комментарии:

1. Попробовал var edithtml = editableObj.innerHTML; var edithtmltrim = edithtml.trim(); Не сработало.

2. @FreeSpirit, определение не сработало…. какие ошибки консоли, если таковые имеются? Что произошло / не произошло? Я спрашиваю, потому что представленный код работает: jsfiddle.net/euhge1g1

3. @FreeSpirit — итак, если я попробую что-то похожее на HTML-элемент в консоли, он будет работать нормально. Вы пробовали ведение журнала в консоли editableObj и editableObj.innerHTML чтобы убедиться, что это то, что вы ожидаете? Если editableObj это объект, завернутый в jQuery, вам нужно развернуть его, чтобы получить доступ к innerHTML методу…

4. @ jhon P: я не вижу «привет, мир», появляющийся в jsfiddle.net/euhge1g1

5.@ Anied: имеет ли это какое-то отношение к включенному скрипту? Я не знаю, какой из них правильный! jquery-1.10.2.js code.jquery.com/ui/1.11.3/jquery-ui.min.js ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js

Ответ №2:

Добавьте этот фрагмент в свой код:

 String.prototype.trim = String.prototype.trim || function trim() { 
       return this.replace(/^ss*/, '').replace(/ss*$/, ''); };
  

Затем используйте:

 var myValue = "  one, two, three    ".trim();
  

или

 var myValue = "  one, two, three    ";
var myValueTrimmed = myValue.trim();
  

Комментарии:

1. Куда я должен поместить строку кода.prototype.trim …. ? После $.ajax({ ? Это не работает. Я сделал все остальное с помощью переменной , как в примере.

Ответ №3:

Ввод пробелов в редактируемый раздел содержимого вставляет неразрывные символы пробела. При извлечении содержимого editableObj.innerHTML они отображаются в виде последовательностей строки символьной сущности «amp;nbsp;». Естественно String.prototype.trim , не удаляет вхождения «amp; nbsp;», потому что они не являются текстом с пробелами!

Если вы извлекаете содержимое, поскольку editableObj.textContent возвращаемый текст содержит фактические неразрывные пробелы с кодом символа 0xA0. String.prototype.trim удаляет их.

В конечном итоге выберите метод обрезки, который соответствует вашим потребностям, в зависимости от того, хотите ли вы сохранить HTML или обычный текст в базе данных.