@ilovemaryjane

Как разбивать параграф построчно?

Параграф текста состоит из нескольких строк. Как программно разбить каждую строку в отдельный div?

Есть ли для этого библы, аналогичные Lettering, который разбивает по-буквенно?

Пример можно посмотреть тут - https://veritystudios.com/services

АПД: 3 ответа и все мимо. Естественно речь о линиях (строках, lines) на которые разбивает БРАУЗЕР в зависимости от вьюпорта. А не линии, в виде данных в хтмл)
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
text.replace(/(.+?(\n|$))/g, '<div class="wrapper">$1</div>')

UPD: такой вариант я уже делал, процитирюу сюда:
Код страшненький, но работает: https://jsfiddle.net/Stalk/mcv6gsmt/2

Клонируем родительский элемент, копируем его контент, замеряем высоту одной строки.
Добавляем в него текст, пока высота не изменится (значит сработал перенос).
Запоминаем строку, и повторяем, пока контент не кончится.
(можно значительно ускорить, если добавлять не посимвольно, а по словам).

Еще есть вариант с canvas measureText(), возможно он будет быстрее работать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
<div class='my-text'>
Я текст
и я пишусь
с каждой строки
</div>


JS:

function splitMe(selector)
{
	var container = document.querySelector(selector);
	var arr = container.innerHTML.split(/\n+/);
	var str = '';
	
	for(var i = 0; i < arr.length; i++)
	{
		if(arr[i]){
			arr[i] = '<div>'+arr[i]+'</div>';
		}
	}
	
	container.innerHTML = arr.join(' ');
}

splitMe('.my-text');


JQuery:

$(function() {
    $(".my-text").each(function() {
        var lines = this.innerHTML.split("\n");
        lines = $.map(lines, function(val) {
            return "<div>" + (val) + "</div>"
        });
        $(this).html(lines)
    })
});
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
разбиваем в HTML-строку:
function text2HTML(text) {
  return text.split('\n').map(line => `<div>${line}</div>`).join('');
}


разбиваем в DOM фрагмент, который потом можно будет вставить на страницу через appendChild:
function text2DOMFragment(text) {
  return text.split('\n').reduce((frag, line) => (frag
    .appendChild(document.createElement('div'))
    .appendChild(document.createTextNode(line)),
  frag), document.createDocumentFragment());
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы