Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Требуется помощь в проверке функции удаления конечных пробелов. (https://javascript.ru/forum/misc/2187-trebuetsya-pomoshh-v-proverke-funkcii-udaleniya-konechnykh-probelov.html)

hurt 16.11.2008 00:38

Требуется помощь в проверке функции удаления конечных пробелов.
 
Подскажите пожалуйста где ошибка, создаю функцию 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 и подключила её и она без проблем работает а эта не поддаётся никак :( очень буду признательно если кто подскажет где ошибка

Zibba 16.11.2008 02:26

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

А теперь к делу:
- Во первых у Вас ошибки в регистре букв, сама функция называется 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. Хотелось бы узнать мнение знающих людей по поводу моего кода. Как бы можно было его улучшить и т.д., не ругайтесь я только учусь помогать :)

hurt 16.11.2008 11:41

Спасибо за помощь нашла свои ошибки и исправила.
Метод split использовала для создания массива из слоев строки, а функция Ltrim убирает начальный пробел.
Вот только ошибка у меня не вылезала, как у вас пока вы не убрали строку с вызовом данной функции может это от того, что у меня сами функции Rtrim и Ltrim записаны совершенно в другие файлы в разрешением *.js
сори что в тегах не оформила в след. раз буду иметь ввиду.

Zibba 16.11.2008 11:51

Просто Вы в приведенном примере кода зачем то вызывали Ltrim которая нигде не описана. Ошибка из-за этого и возникала. (в слудующий раз чистите код от таких вещей :) )

Octane 16.11.2008 12:36

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


Часовой пояс GMT +3, время: 18:55.