Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.11.2008, 00:38
Новичок на форуме
Отправить личное сообщение для hurt Посмотреть профиль Найти все сообщения от hurt
 
Регистрация: 15.11.2008
Сообщений: 2

Требуется помощь в проверке функции удаления конечных пробелов.
Подскажите пожалуйста где ошибка, создаю функцию Rtrim и затем подключаю её к html документу но она не хочет работать

function rtrim(xstr){
if (! (xstr.lastlndexOf (" ") == xstr.length - 1))
return xstr;
var astr = xstr.split(" ");
var i = astr.length -1
while (i>0){
if (!(astr[i] == ("")))
break;
i;
}
return xstr = xstr.substring(0, 1+1);
}

Затем в html пишу

<HTML>
<HEAD>

<script language="JavaScript" type="text/javascript"
src="Ltrim.js"></script>
<script language="JavaScript" type="text/javascript"
src="Rtrim.js"></script>

<TITLE> </TITLE>

<script>
inv=window.prompt("Введите текст с пробелами в начале и в конце строки"," ааа ");
window.alert("/"+inv+"/");
window.alert("/"+Ltrim(inv)+"/");
window.alert("/"+Rtrim(inv)+"/");
</script>

</HEAD>
<BODY>
</BODY>
</HTML>

Ранее создала функцию ltrim и подключила её и она без проблем работает а эта не поддаётся никак очень буду признательно если кто подскажет где ошибка
Ответить с цитированием
  #2 (permalink)  
Старый 16.11.2008, 02:26
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

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

А теперь к делу:
- Во первых у Вас ошибки в регистре букв, сама функция называется rtrim, а вызываете Вы Rtrim. Т.к. JS восприимчив к регистру букв, то думает что такой функции не существует.
- Во вторых так и не понял что за функция Ltrim и для чего она вызывается, ну в общем это и не важно , но в моем случае (соответственно) вылетает ошибка, если не убрать строчку с вызовом данной функции.
- В третьих вы возвращаете substring(0, 1+1); в своей функции. т.е. первые два символа т.к. второй аргумент функции указывает количество символов начиная с первого.
- В четвертых, самое главное (!). В цикле Вы ничего не делаете со счетчиком цикла, в итоге получаем вечный цикл.
Вроде бы все Ваши ляпы (за исключением непонимания мною использования метода split в Вашем случае)

В общем я не JS гуру, но вот что у меня получилось, вроде бы работает:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />
		<title></title>
		<script type="text/javascript">
			function rtrim(str){
				var i = str.length - 1;
				if(str.charAt(i)!= " ") return str;
				while(i){
					if(str.charAt(i) == " ") i--;
					else break;
				}
				return str.substr(0, i+1);
			}
			
			inv = prompt("Введите текст с пробелами: ", " abc    ");
			window.alert("/"+inv+"/\n/"+rtrim(inv)+"/");
		</script>
	</head>
	<body></body>
</html>


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

Последний раз редактировалось Zibba, 16.11.2008 в 02:29. Причина: синтаксические ошибки
Ответить с цитированием
  #3 (permalink)  
Старый 16.11.2008, 11:41
Новичок на форуме
Отправить личное сообщение для hurt Посмотреть профиль Найти все сообщения от hurt
 
Регистрация: 15.11.2008
Сообщений: 2

Спасибо за помощь нашла свои ошибки и исправила.
Метод split использовала для создания массива из слоев строки, а функция Ltrim убирает начальный пробел.
Вот только ошибка у меня не вылезала, как у вас пока вы не убрали строку с вызовом данной функции может это от того, что у меня сами функции Rtrim и Ltrim записаны совершенно в другие файлы в разрешением *.js
сори что в тегах не оформила в след. раз буду иметь ввиду.
Ответить с цитированием
  #4 (permalink)  
Старый 16.11.2008, 11:51
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Просто Вы в приведенном примере кода зачем то вызывали Ltrim которая нигде не описана. Ошибка из-за этого и возникала. (в слудующий раз чистите код от таких вещей )
Ответить с цитированием
  #5 (permalink)  
Старый 16.11.2008, 12:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Это пипец конечно какое решение для тримеров, такие вещи надо делать с помощью регулярных выражений, а не посимвольным перебором строки.
function rtrim(str) {
  return str.replace(/\s+$/, '');
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цитирование текста в комментариях. Требуется помощь. shinjuku Общие вопросы Javascript 3 07.07.2008 14:19