@GreenMan1899

Как длинную строку разбить в массив по её переносам в контейнере?

Есть блок шириной, допустим, 200 px. В него добавляется длинный текст одной строкой. Т.к. ширина блока ограничена, то текст может переноситься на несколько строчек.

Задача эти переносы строк «поймать» и создать отдельный массив строк так же, как строки перенеслись в браузере, независимо от того, какой длины текст и во сколько строчек он перенесется в этом блоке.
  • Вопрос задан
  • 905 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Нетривиальный способ: добавлять исходный текст в элемент по одному слову, и смотреть за высотой элемента. Как только она скакнула – началась новая строка.

Примерно так:
var $el = $('h1');
var s = $el.text().split(/\s+/);
var i, h = {curr:0, prev:0}, parts = [], word, back=[];
while(s.length) {
  word = s.shift();
  back.push(word);
  $el.html( back.join(' '));
  h.curr = $el.height();
  if( h.curr !== h.prev) {
    parts.push([]);
    h.prev = h.curr;
  }
  parts[ parts.length - 1].push(word);
}
parts = parts.map((e,i) => '<span class="row'+i+'">' + e.join(' ') + '</span>');

$el.html(parts.join("\n"));

CodePen
92ae2d6459994d00a2d8745575845e03.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы