Показать сообщение отдельно
  #13 (permalink)  
Старый 11.10.2019, 03:58
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

j0hnik, а сочетанные буквы? Вы вбросили свой пример на форум даже не проверив его работоспособность!

Ваш пример неправильно разбивает на графемы! Вот пример...

Неправильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	text.innerHTML = text.innerHTML.replace(/./gi, '<span>$&</span>');
	setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>


В данном случае нужна нормализация!

Немного более правильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	text.innerHTML = text.innerHTML.normalize().replace(/./gi, '<span>$&</span>');
	setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>
Хотя метод normalize не может обработать все случаи, он достаточно хорошо работает с большинством старых текстов. Современные тексты, которые содержат новые символы, эмоджи, флаги и пр. не могут быть правильно обработаны при помощи этого метода.

Для правильного разбиения текста используйте Grapheme Splitter.

Правильная разбивка текста
<script src="https://unpkg.com/grapheme-splitter@1.0.4/index.js"></script>
<div id="text" style="font-size: 2em;">안녕하세요 &#128514; </div>

<script>
	var splitter = new GraphemeSplitter();
	text.innerHTML = splitter.splitGraphemes(text.innerHTML).map(g => `<span>${g}</span>`).join("");
	setInterval(() => text.appendChild(text.querySelector('span')), 50);
</script>
Ответить с цитированием