Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Плагин для переноса слов по слогам (https://javascript.ru/forum/dom-window/86560-plagin-dlya-perenosa-slov-po-slogam.html)

sashgera 03.08.2025 14:24

Плагин для переноса слов по слогам
 
Здравствуйте
Нашел на github плагин для переноса слов по слогам
Немного изменил плагин, что бы перенос слов был и в латинице
RusLatA - добавил буквы английского алфавита
RusLatV - добавил гласные буквы английского алфавита
RusLatN - добавил согласные буквы английского алфавита

Но теперь появилась такая проблема - в тексте есть див '#line_break', который используется в качестве разделителя и стили этого дива игнорируются
если убрать из RusLatV буквы английского алфавита (aeiou), тогда все норм, стили дива выполняются
Код:

<style type="text/css">
#test{
        width:110px;
        height:300px;
        background:#CF9;
        text-align:justify;
}
#line_break{
        width:100%;
        height:1px;
        font-size:1px;
        margin-top:3px;
        border-top:1px dotted currentColor;
}
</style>

<button onclick="transfer();">перенос текста</button>

<div id="test">
    проверка переноса слов латиницы и Cyrillic по слогам
    <div id='line_break'></div>
    test переноса слов после разделителя
</div>

<script type="text/javascript">
$.fn.hyphenate = function(){
        var RusLatA = "[abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя]";
        var RusLatV = "[aeiouаеёиоуыэю\я]";
        var RusLatN = "[bcdfghjklmnpqrstvwxyzбвгджзклмнпрстфхцчшщ]";
        var RusLatX = "[йъь]";
        var Hyphen = "\xAD";
        var re1 = new RegExp("("+RusLatX+")("+RusLatA+RusLatA+")","ig");
        var re2 = new RegExp("("+RusLatV+")("+RusLatV+RusLatA+")","ig");
        var re3 = new RegExp("("+RusLatV+RusLatN+")("+RusLatN+RusLatV+")","ig");
        var re4 = new RegExp("("+RusLatN+RusLatV+")("+RusLatN+RusLatV+")","ig");
        var re5 = new RegExp("("+RusLatV+RusLatN+")("+RusLatN+RusLatN+RusLatV+")","ig");
        var re6 = new RegExp("("+RusLatV+RusLatN+RusLatN+")("+RusLatN+RusLatN+RusLatV+")","ig");
        this.each(function(){
                var text=$(this).html();
                text = text.replace(re1, "$1"+Hyphen+"$2");
                text = text.replace(re2, "$1"+Hyphen+"$2");
                text = text.replace(re3, "$1"+Hyphen+"$2");
                text = text.replace(re4, "$1"+Hyphen+"$2");
                text = text.replace(re5, "$1"+Hyphen+"$2");
                text = text.replace(re6, "$1"+Hyphen+"$2");
                $(this).html(text);
        });
};

function transfer(){
        $("#test").hyphenate();
}
</script>


Nexus 03.08.2025 14:38

Вы для своей магии используете не текстовое содержимое блока, а его html-разметку. Из-за этого, возможно, верстка блока нарушается и ваш блок #line_break дематериализуется.

Код - мое почтение. Без бутылки-другой даже пытаться разобраться - страшно.

sashgera 03.08.2025 16:09

Цитата:

Сообщение от Nexus
блок #line_break дематериализуется

Nexus, блок #line_break не удаляется, удаляются стили этого дива
и как я уже писал выше, если из RusLatV убрать буквы английского алфавита (aeiou), тогда стили не удаляются

sashgera 03.08.2025 16:47

изменил название дива #line_break на #lb
исключив в названии гласные буквы, костыль конечно, но так все работает - стили дива не удаляются


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