Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 07.08.2022, 08:35
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
Да то что нужно я был просто не внимателен и не увидел разницу в символе. Спасибо.

А как вы считаете насколько корректен это перенос с точки зрения русского языка ?
И это скрипт не сильно будет тормозить страницу если так будет большой объем текста?
Ответить с цитированием
  #22 (permalink)  
Старый 07.08.2022, 08:43
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,

А как это скрипт переделать что бы он работал с только с тем блоком у которого есть к класс .tekst
Ответить с цитированием
  #23 (permalink)  
Старый 07.08.2022, 11:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сергей Ракипов,
строка 64 укажите нужный класс/ы.
<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .separated {
            width: 80%;
            margin: 30px auto;
        }
        .separated.min{
            width: 30%;
        }

    </style>
    <script>
        var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig;
        var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|разъ?|рас|со)/i;

        function Separatist(part, pos, text) {
            var slab, next, seps = [];
            var pref;
            pos += part.match(/^\s*/)[0].length;
            part = part.replace(/^\s+/, "");
            while ((pref = part.match(Prefixes)) && pref[0] != "") {
                seps.push(pref[0]);
                part = part.substr(pref[0].length);
            }
            if (slab = part.match(/^й[ао][дшк]+[аеёиоуыэюя]?/)) {
                seps.push(part.substr(0, slab[0].length));
                part = part.substr(slab[0].length);
            }
            while (part.length) {
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)/i)) {
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) {
                    if (next = part.substr(slab[0].length).match(/^[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) {
                        if (!next[0].match(/[аеёиоуыэюя]/i))
                            slab[0] += next[0];
                    }
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*/i)) {
                    if (slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i))
                        slab[0] = slab[0].substr(0, slab[0].length - 1);
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else {
                    seps.push(part);
                    part = "";
                }
            }
            if (seps.length > 1 && seps[0].length == 1)
                seps[0] = seps.shift() + seps[0];
            if (seps.length > 1 && seps[seps.length - 1].length == 1)
                seps[seps.length - 2] = seps[seps.length - 2] + seps.pop();
            return seps.join("\u00AD");
        }
        document.addEventListener("DOMContentLoaded", function() {
            let elems = document.querySelectorAll(".separated");
            elems.forEach(el => {
                let txt = el.textContent;
                el.textContent = txt.replace(WholeWord, Separatist);

            })
        })
    </script>
</head>

<body>
    <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
   <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
</body>

</html>
Ответить с цитированием
  #24 (permalink)  
Старый 07.08.2022, 11:59
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
Спасибо
Ответить с цитированием
  #25 (permalink)  
Старый 07.08.2022, 14:44
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
А что получается если внутри какой то класс то это класс не будет работать?

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .separated {
            width: 80%;
            margin: 30px auto;
        }
        .separated.min{
            width: 30%;
        }
        .test{
            font-size: 2rem;
        }
    </style>
    <script>
        var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig;
        var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|разъ?|рас|со)/i;

        function Separatist(part, pos, text) {
            var slab, next, seps = [];
            var pref;
            pos += part.match(/^\s*/)[0].length;
            part = part.replace(/^\s+/, "");
            while ((pref = part.match(Prefixes)) && pref[0] != "") {
                seps.push(pref[0]);
                part = part.substr(pref[0].length);
            }
            if (slab = part.match(/^й[ао][дшк]+[аеёиоуыэюя]?/)) {
                seps.push(part.substr(0, slab[0].length));
                part = part.substr(slab[0].length);
            }
            while (part.length) {
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)/i)) {
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) {
                    if (next = part.substr(slab[0].length).match(/^[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) {
                        if (!next[0].match(/[аеёиоуыэюя]/i))
                            slab[0] += next[0];
                    }
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*/i)) {
                    if (slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i))
                        slab[0] = slab[0].substr(0, slab[0].length - 1);
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else {
                    seps.push(part);
                    part = "";
                }
            }
            if (seps.length > 1 && seps[0].length == 1)
                seps[0] = seps.shift() + seps[0];
            if (seps.length > 1 && seps[seps.length - 1].length == 1)
                seps[seps.length - 2] = seps[seps.length - 2] + seps.pop();
            return seps.join("\u00AD");
        }
        document.addEventListener("DOMContentLoaded", function() {

            let elems = document.querySelectorAll(".separated"); 
            // указать нужные классы 
            
            elems.forEach(el => {
                let txt = el.textContent;
                el.textContent = txt.replace(WholeWord, Separatist);

            })
        })
    </script>
</head>

<body>
    <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, <span class="test">потому что проводится много мероприятий,</span> бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
   <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
</body>

</html>
Ответить с цитированием
  #26 (permalink)  
Старый 07.08.2022, 16:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Сергей Ракипов
А что получается если внутри какой то класс то это класс не будет работать?

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .separated {
            width: 80%;
            margin: 30px auto;
        }
        .separated.min{
            width: 30%;
        }
        .test{
            font-size: 2rem;
        }
    </style>
    <script>
        var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig;
        var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|разъ?|рас|со)/i;

        function Separatist(part, pos, text) {
            var slab, next, seps = [];
            var pref;
            pos += part.match(/^\s*/)[0].length;
            part = part.replace(/^\s+/, "");
            while ((pref = part.match(Prefixes)) && pref[0] != "") {
                seps.push(pref[0]);
                part = part.substr(pref[0].length);
            }
            if (slab = part.match(/^й[ао][дшк]+[аеёиоуыэюя]?/)) {
                seps.push(part.substr(0, slab[0].length));
                part = part.substr(slab[0].length);
            }
            while (part.length) {
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)/i)) {
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) {
                    if (next = part.substr(slab[0].length).match(/^[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) {
                        if (!next[0].match(/[аеёиоуыэюя]/i))
                            slab[0] += next[0];
                    }
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else
                if (slab = part.match(/^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*/i)) {
                    if (slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i))
                        slab[0] = slab[0].substr(0, slab[0].length - 1);
                    seps.push(slab[0]);
                    part = part.substr(slab[0].length);
                } else {
                    seps.push(part);
                    part = "";
                }
            }
            if (seps.length > 1 && seps[0].length == 1)
                seps[0] = seps.shift() + seps[0];
            if (seps.length > 1 && seps[seps.length - 1].length == 1)
                seps[seps.length - 2] = seps[seps.length - 2] + seps.pop();
            return seps.join("\u00AD");
        }
        document.addEventListener("DOMContentLoaded", function() {

            let elems = document.querySelectorAll(".separated");
            // указать нужные классы

            elems.forEach(el => {
                let txt;
                walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false);
                while(txt=walk.nextNode()) txt.data = txt.data.replace(WholeWord, Separatist);

            })
        })
    </script>
</head>

<body>
    <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, <span class="test">потому что проводится много мероприятий,</span> бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
   <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что
        если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную
        связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает,
        что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят
        и те, кто выбирается на служение о многом не знают.</div>
</body>

</html>
Ответить с цитированием
  #27 (permalink)  
Старый 08.08.2022, 05:16
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
А это я был не внимательный или скрипт изменен был?
Ответить с цитированием
  #28 (permalink)  
Старый 08.08.2022, 07:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сергей Ракипов,
скрипт, конечно, изменён, в новом варианте, внутри элемента изменяются все текстовые блоки, а не текст целиком, что приводило к стиранию внутренних элементов.
Ответить с цитированием
  #29 (permalink)  
Старый 08.08.2022, 07:48
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
Спасибо ) я правда вам благодарен за все года что вы помогаете тут. Спасибо
Ответить с цитированием
  #30 (permalink)  
Старый 08.08.2022, 15:00
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

Неплохo было бы вставить весь текст отсюда («Война и Мир») здесь и оценить время работы функции на большом объёме текста…
(К тому же все баги переноса выявятся на этой классике.)

P.S.: Не думаю, что на сайтах будут публиковать колонки размером больше классики…
В худшем случае, можно на серверной стороне предобработать все тексты заранее (в момент первого доступа к конкретному) и закешировать, выдавая пользователю их уже в готовом виде с переносами.

P.P.S.: Исправил ещё один баг: Слово «тускловатый» делилось на «тус-кло-ва-тый» (верно - «туск-ло-ва-тый»)…
Фиксится вот этот код этим:
if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) {
			if(next = part.substr(slab[0].length).match(/^([бвгджзклмнпрстфхцчшщ]+)[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i))
				slab[0] += next[1];
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else

Последний раз редактировалось Alikberov, 08.08.2022 в 17:15.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт переноса по слогам не работает life-life Элементы интерфейса 0 18.10.2017 17:19
Отправка данных аякс по Enter, перенос строки Enter+Ctrl shyxeroks Элементы интерфейса 1 30.03.2017 15:00
JQuery + перенос в восточных языках Goopy jQuery 4 15.06.2016 17:50
Перенос строк в Ext.grid.Panel khusamov ExtJS 11 10.04.2013 04:03
Отправка формы по ENTER (ajax) и перенос строки VEGA jQuery 18 01.03.2013 14:09