Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обрезание текста (https://javascript.ru/forum/misc/21337-obrezanie-teksta.html)

Dorian_bs 05.09.2011 20:00

Обрезание текста
 
Всем привет!
Помогите! Не получается осуществить следующую задачу..
У меня есть код:

Например:

<div class="file">
  <div class="zagol">тра ля ля, тра ля ля</div>
</div>

<div class="file">
  <div class="zagol">тра я ля</div>
</div>

....


При условии, если в заголовке количество символов превышает "5", тогда заголовок обрезается и на конце ставится "...".
Помогите осуществить!

Триви 05.09.2011 20:58

<script type="text/javascript">
window.onload = function(){
  div_arr = document.getElementsByTagName('div');
  for (var i = 0; i < div_arr.length; i++) {
       if(div_arr[i].className=='zagol') {
          if (div_arr[i].innerHTML.length > 5) {
              div_arr[i].innerHTML = div_arr[i].innerHTML.substr( 0, 5 )+ "...";
          }
       }
  }
};
</script>

ваый 05.09.2011 21:55

Триви, не учитываешь переносы строк.

Dorian_bs 06.09.2011 00:20

Триви,
Спасибо большое!)))))
ваый, да, но в данном случае можно использовать и "white-space: nowrap" =)

Триви 06.09.2011 00:38

Цитата:

Сообщение от ваый (Сообщение 125047)
Триви, не учитываешь переносы строк.

Это уже ария из другой оперы))
Кроме того, не думаю, что в заголовке могут встречаться символы переноса..

зы: я чесслово не понимаю зачем вообще такое нужно..
почему бы сразу серверным скриптом не нагенерить так как нужно? :-?

Триви 06.09.2011 00:55

Кстати, а если в дивах с nowrap будут присутствовать символы перевода строки,
означает ли это, что innerHTML вернет значение без них? :blink:

Dorian_bs 06.09.2011 01:01

Не знаю))
"присутствовать символы перевода строки" - но их там нет)))

"почему бы сразу серверным скриптом не нагенерить так как нужно?"
Ucoz не такой умный)

popov654 06.09.2011 01:01

Проверь)
Кстати, что даёт nowrap - запрещает перенос слов что ли?

ваый 06.09.2011 01:08

Цитата:

Сообщение от Триви
Кстати, а если в дивах с nowrap будут присутствовать символы перевода строки,
означает ли это, что innerHTML вернет значение без них?

ну даже если там явно переносов нету, это не значит, что их нет.
<div class="zagol">
    тра ля ля, тра ля ля
</div>
Тут 5 символов будет совсем не те, что ожидается.

Триви 06.09.2011 01:10

Цитата:

Сообщение от popov654 (Сообщение 125079)
Проверь)

Если честно, впадлу))
Потому что я забыл мышак в офисе,
а тачпад маня нервирует :-E :D

Проверь, интересно же! =))

Триви 06.09.2011 01:14

Цитата:

Сообщение от ваый (Сообщение 125081)
ну даже если там явно переносов нету, это не значит, что их нет.
<div class="zagol">
    тра ля ля, тра ля ля
</div>
Тут 5 символов будет совсем не те, что ожидается.

ну а кто мешает сделать trim с помощью jQ ?
или мы щас будем тужиться регулярки для этого писать? :)

popov654 06.09.2011 01:39

Проверил)
Переводы считаются в innerHTML, и никакой nowrap не спасает)
Очень хорошо, что у ТС их нет ;)

popov654 06.09.2011 01:43

Цитата:

Сообщение от Триви
или мы щас будем тужиться регулярки для этого писать? :)

Почему бы и нет) Практика и ещё раз практика))

Триви 06.09.2011 02:13

Цитата:

Сообщение от popov654 (Сообщение 125085)
Проверил)
Переводы считаются в innerHTML, и никакой nowrap не спасает)
Очень хорошо, что у ТС их нет ;)

Не сомневался)))
nowrap говорит браузеру как выводить содержимое тэга на экран, не больше.. :)

ваый 06.09.2011 08:55

Цитата:

Сообщение от Триви
ну а кто мешает сделать trim с помощью jQ ?
или мы щас будем тужиться регулярки для этого писать?

Э, ты чо :haha: ? Какое тужится, задача обрезать символы с концов строк - это даже не регулярка:
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, '');
};

devote 06.09.2011 09:20

Цитата:

Сообщение от ваый
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, '');
};

не рабочий способ

ваый 06.09.2011 09:51

Цитата:

Сообщение от devote
не рабочий способ

это почему?

devote 06.09.2011 10:03

Сорри, ляпнул с дуру не то... Не заметил глобальный модификатор. Но тем не менее trim должен резать еще табы. перевод строк... Хотя это мелочь

ваый 06.09.2011 10:04

\s - включает в себя и табы и переводы строк. любой whitespace character.

devote 06.09.2011 10:21

Цитата:

Сообщение от ваый
\s - включает в себя и табы и переводы строк. любой whitespace character.

Да привычка из PHP у меня... там \s - просто пробел и не более.

ваый 06.09.2011 10:45

И в php тоже - any whitespace character.
\s == [ \t\r\n]

devote 06.09.2011 10:58

Цитата:

Сообщение от ваый
И в php тоже - any whitespace character.
\s == [ \t\r\n]

Ладно, ладно убедили... :)

Триви 06.09.2011 14:55

Цитата:

Сообщение от ваый (Сообщение 125104)
Э, ты чо :haha: ? Какое тужится, задача обрезать символы с концов строк - это даже не регулярка:
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, '');
};

Ну если уж быть до конца въедливым, то в данном примере,
на мой скромный взгляд, круглые скобки не нужны))
Зачем нагружать память кампутера? :D
Или уж, если очень нравитсо, то так: /(?:^\s*)|(?:\s*$)/g
Т.о. наши вайтспесовые символы не будут заноситься в переменные :yes:

Не забудь ещё \s{2,} для случая:
<div class="file">
  <div class="zagol">         тра

   ля ля, тра ля

    ля   </div>
</div>

чтобы покоцать множественные пробелы-табы-переводы :D

Триви 06.09.2011 15:02

Цитата:

Сообщение от ваый (Сообщение 125149)
И в php тоже - any whitespace character.
\s == [ \t\r\n]

точнее в perl ;)
родные пхпшные это всё таки POSIX
а там \s == [ ]
это уже потом по просьбам трудящихся в движок встроили перл-совместимые..
видимо коллега devote очень давно изучал PHP :) :) :)

devote 06.09.2011 15:18

Цитата:

Сообщение от Триви
видимо коллега devote очень давно изучал PHP

Начал изучать очень давно, еще с версии PHP 3


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