#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()
aroundnav
. Для ваших данных вы можете / должны использовать стандартный объект 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 или обычный текст в базе данных.