Не корректно работает 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 символов. Еще неделю просидеть с этим - это уже слишком |
<textarea id="test1">1 2</textarea> <script type="text/javascript"> alert(document.getElementById("test1").value.length); </script> |
Я понял, ты хотел сказать мне, что все отлично работает. И я согласен, что length работает нормально, но мне нужно обрезать текст до 500 символов. А slice и substr обрезают большой текст с абзацами так, как будто бы вместе с ним есть какие-то скрытые символы
|
Вопрос все еще актуален. Думаю, многим будет интересно, что за фокус такой
|
Цитата:
|
То есть лучше смириться с грустным фактом, что обрезать большой текст с точностью до n-го кол-ва символов нереально? Причем, когда человек печатает в поле, то slice и substr работают нормально, а когда вставляет большой текст, то работает приблизительно нормально) Может там скрытые символы удалить как-то или еще чего?
|
Все реально. Если переносы строк не нужны, удалите их перед получением фрагмента строки.
|
Цитата:
|
Под символами подразумеваю цифры, буквы, пробелы, спец. символы, а также возможно переносы строк. Сейчас попробовал удалить все переносы /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-е - Файл - Свойства - Статистика |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 17:38. |