Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2010, 14:31
Интересующийся
Отправить личное сообщение для Dotod Посмотреть профиль Найти все сообщения от Dotod
 
Регистрация: 30.11.2009
Сообщений: 20

Не корректно работает slice
Мир клубу опасных людей! Проблема вот в чем: вызываю приведенную ниже функцию по событию onChange к некоторому textarea:

[ js ]
function sliceta(obj_slice)
{
var a = obj_slice.value.length;
if (a >= 500) obj_slice.value = obj_slice.value.slice(0,500);
}
[ /js ]

Она должна образать введенный в textarea текст до 500 символов. При вставке текста такого вида все работает нормально:

"В Российской Федерации признаются и гарантируются права и свободы человека и гражданина согласно общепризнанным принциам и нормам междунаро8ного права и в соответствии с настоящей Конституцией. Основные права и свободы человека неотчуждаемы и принадлежат каждому от рождения. Осуществление прав и свобод человека и гражданина не должно нарушать права и свободы других лиц.
...
...
..."

Но при вставке текста следующего вида с абзацами получаю в firefox-е 496 символов вместо указанных 500, а в oper-е 492 символа:

"В Российской Федерации признаются и гарантируются права и свободы человека и гражданина согласно общепризнанным принциам и нормам междунаро8ного права и в соответствии с настоящей Конституцией.

2. Основные права и свободы человека неотчуждаемы и принадлежат каждому от рождения.

3. Осуществление прав и свобод человека и гражданина не должно нарушать права и свободы других лиц
...
...
..."

В обоих случаях текст вставляется в textarea общей сложностью в 1607 символов. Еще неделю просидеть с этим - это уже слишком
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2010, 14:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

<textarea id="test1">1
2</textarea>
<script type="text/javascript">
alert(document.getElementById("test1").value.length);
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2010, 14:55
Интересующийся
Отправить личное сообщение для Dotod Посмотреть профиль Найти все сообщения от Dotod
 
Регистрация: 30.11.2009
Сообщений: 20

Я понял, ты хотел сказать мне, что все отлично работает. И я согласен, что length работает нормально, но мне нужно обрезать текст до 500 символов. А slice и substr обрезают большой текст с абзацами так, как будто бы вместе с ним есть какие-то скрытые символы
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2010, 15:11
Интересующийся
Отправить личное сообщение для Dotod Посмотреть профиль Найти все сообщения от Dotod
 
Регистрация: 30.11.2009
Сообщений: 20

Вопрос все еще актуален. Думаю, многим будет интересно, что за фокус такой
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2010, 15:12
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Сообщение от Dotod
как будто бы вместе с ним есть какие-то скрытые символы
не как будто, а действительно есть непечатные символы
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2010, 15:19
Интересующийся
Отправить личное сообщение для Dotod Посмотреть профиль Найти все сообщения от Dotod
 
Регистрация: 30.11.2009
Сообщений: 20

То есть лучше смириться с грустным фактом, что обрезать большой текст с точностью до n-го кол-ва символов нереально? Причем, когда человек печатает в поле, то slice и substr работают нормально, а когда вставляет большой текст, то работает приблизительно нормально) Может там скрытые символы удалить как-то или еще чего?
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2010, 15:29
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Все реально. Если переносы строк не нужны, удалите их перед получением фрагмента строки.
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2010, 15:42
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dotod
То есть лучше смириться с грустным фактом, что обрезать большой текст с точностью до n-го кол-ва символов нереально?
Вы сейчас что символами называете?
Ответить с цитированием
  #9 (permalink)  
Старый 30.01.2010, 16:07
Интересующийся
Отправить личное сообщение для Dotod Посмотреть профиль Найти все сообщения от Dotod
 
Регистрация: 30.11.2009
Сообщений: 20

Под символами подразумеваю цифры, буквы, пробелы, спец. символы, а также возможно переносы строк. Сейчас попробовал удалить все переносы /n и /r, добавив метод replace вот так:

[ js ]
function sliceta(obj_slice)
{
var a = obj_slice.value.length;
if (a >= 500)
{
b = obj_slice.value.slice(0,500);
obj_slice.value = b.replace(/(\n(\r)?)/g, ' ');
}
}
[ /js ]

Но та же история - получаю 496, 492 символа, но не 500. Число символов проверяю в word-е - Файл - Свойства - Статистика
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2010, 16:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Сообщение от Dotod
b = obj_slice.value.slice(0,500);
obj_slice.value = b.replace(/(\n(\r)?)/g, ' ');
Сообщение от Octane
Если переносы строк не нужны, удалите их перед получением фрагмента строки.
и регулярное выражение неправильное
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 14:59
свойство innerHTML в Opera и Firefox работает не корректно? figaro Javascript под браузер 1 04.11.2009 23:57
Opera не корректно работает со скриптом Anat.nem Opera, Safari и др. 4 30.10.2009 12:39
Скрипт В IE отрабатывает корректно, но не работает в FF 3.5 Sonkkorh AJAX и COMET 11 27.07.2009 18:03
В объекте не корректно работает инкремента (++ или +=1)) Bratok Общие вопросы Javascript 2 28.04.2009 00:28