2016-10-10 2 views
-1

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

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

Проблема: все работает нормально, пока не осталось НИКАКОГО пробела перед словом! В DIV уже может быть текст, это может быть пустой DIV, где текст может быть вставлен.

Я пробовал в javascript в DIV как обрезать (это) но это не работает. Даже Inthe самого сценария я попытался $ .trim (editableObj.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 + '&linktitle=' + editableObj.innerHTML + '&linkmainid=' + linkmainid + '&action=' + nav + '&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> 
+0

Посмотрите на документы для ['.trim()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim). Trim вызывается в строке без параметров. – Jecoms

+0

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

+0

Если вас интересует только текст (без другого html), попробуйте [textContent] (https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) вместо 'innerHTML' –

ответ

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

trim

+0

Пробовал var edithtml = editableObj.innerHTML; \t var edithtmltrim = edithtml.trim(); Не работал. – FreeSpirit

+1

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

+1

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

0

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

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

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

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

или

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

Где я должен поместить код String.prototype.trim ....? После $ .ajax ({? Это не работает). Я сделал все остальное с ** var **, как в примере. – FreeSpirit

+0

Я работал с вашими кодами! – FreeSpirit

0

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

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

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