Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2011, 19:48
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Неработает код для форматирования текста
Я недавно начал изучать JavaScript и у меня возникла проблема.

Нужно чтобы в полученном тексте строки были не больше 20 символов
я написал вот такой код:
str = prompt('Введите текст.','');
nstr = [];
a = 0; //номер ячейки
b=20; //условие для перехода на новую строку

for (i=0; i<str.length; i++)
{
    if (i > b) {a+=1; b+=20;};
    nstr[a] =  nstr[a] + charAt(i);
}

document.write(nstr.join('<br>'));

//каждая новая строка записывается в новую ячейку массива nstr

но этот код не работает.
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2011, 19:54
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Ukrainian
nstr[a] = nstr[a] + charAt(i)
Проблема в этой строчке. charAt(i) - это метод строки, и должен вызываться у строки. И у строки есть хороший метод substr, попробуйте использовать его.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2011, 19:59
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Спасибо, сейчас попробую.
Ответить с цитированием
  #4 (permalink)  
Старый 19.11.2011, 20:14
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Всеравно не работает:
str = prompt('Введите текст.','');
nstr = [];
a = 0; //номер ячейки
b=20; //условие для перехода на новую строку

for (i=0; i<str.length; i++)
{
    if (i > b) {a+=1; b+=20;};
    nstr[a] += str.substr(i, 1);
}

document.write(nstr.join('<br>'));
Ответить с цитированием
  #5 (permalink)  
Старый 19.11.2011, 20:19
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Хотя нет кажется я понял.
Ответить с цитированием
  #6 (permalink)  
Старый 19.11.2011, 20:29
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Вот нужно заменить:
for (i=0; i<str.length; i++) 
{ 
if (i > b) {a+=1; b+=20;}; 
nstr[a] =  nstr[a] + charAt(i); 
}

на:
for (i=0; i++)
{
nstr[i] = str.substr(i * 20, 20);
if (nstr[i] = "") {break};
}
Ответить с цитированием
  #7 (permalink)  
Старый 19.11.2011, 20:36
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

Всеравно не работает(
Ответить с цитированием
  #8 (permalink)  
Старый 19.11.2011, 20:46
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

str="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
lines_num= Math.floor(str.length/20) + (str.length%20 ? 1 : 0);// вычисляем кол-во строк
arr=[];
for (var i=0; i!= lines_num; ++i) {
 arr.push(str.substring(i*20, (i+1)*20));
};
alert(arr.join("\n"));


Хотя лучше регулярками:
str="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
alert(str.match(/[\s\S]{0,20}/g).join("\n"));


UPD: Упс, ошибка вышла. Поправил регулярку.
UPD: Правильнее использовать Math.floor.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)

Последний раз редактировалось trikadin, 19.11.2011 в 23:04.
Ответить с цитированием
  #9 (permalink)  
Старый 19.11.2011, 22:50
Аватар для Ukrainian
Новичок на форуме
Отправить личное сообщение для Ukrainian Посмотреть профиль Найти все сообщения от Ukrainian
 
Регистрация: 19.11.2011
Сообщений: 8

А что неправильно в моем варианте?
Что за Math.round?
И что за регулярки?
Ответить с цитированием
  #10 (permalink)  
Старый 19.11.2011, 23:02
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Ukrainian
А что неправильно в моем варианте?
Он не работает)) Это главная ошибка. А вообще, ошибка в этой строчке:
nstr[i] = str.substr(i * 20, 20);

Вы берёте символы от i*20 до 20-ти. Это не есть правильно.
Сообщение от Ukrainian
Что за Math.round?
Округление
Сообщение от Ukrainian
И что за регулярки?
Регулярные выражения

И вообще-то поиск есть.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery поменять CSS цвет для текста при наведении мышью (.text:hover) JooZ jQuery 16 15.11.2010 19:56
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
смайлы для чата, замена текста brain Общие вопросы Javascript 9 28.11.2008 21:35
Форма для ввода текста с расширенными функциями 0x22b Элементы интерфейса 0 01.09.2008 10:38