
03.08.2025, 14:24
|
Кандидат Javascript-наук
|
|
Регистрация: 20.09.2011
Сообщений: 147
|
|
Плагин для переноса слов по слогам
Здравствуйте
Нашел на 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> |
|
|

03.08.2025, 14:38
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,833
|
|
Вы для своей магии используете не текстовое содержимое блока, а его html-разметку. Из-за этого, возможно, верстка блока нарушается и ваш блок #line_break дематериализуется.
Код - мое почтение. Без бутылки-другой даже пытаться разобраться - страшно.
|
|

03.08.2025, 16:09
|
Кандидат Javascript-наук
|
|
Регистрация: 20.09.2011
Сообщений: 147
|
|
Сообщение от Nexus
|
блок #line_break дематериализуется
|
Nexus, блок #line_break не удаляется, удаляются стили этого дива
и как я уже писал выше, если из RusLatV убрать буквы английского алфавита (aeiou), тогда стили не удаляются
|
|

03.08.2025, 16:47
|
Кандидат Javascript-наук
|
|
Регистрация: 20.09.2011
Сообщений: 147
|
|
изменил название дива #line_break на #lb
исключив в названии гласные буквы, костыль конечно, но так все работает - стили дива не удаляются
|
|

04.08.2025, 12:17
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,150
|
|
sashgera,
Сообщение от Nexus
|
Вы для своей магии используете не текстовое содержимое блока, а его html-разметку.
|
пример обработки только текста и просто по теме переноса ...
пост #32 строки 70 - 75
https://javascript.ru/forum/misc/843...-slogam-4.html
|
|

11.08.2025, 17:17
|
Кандидат Javascript-наук
|
|
Регистрация: 20.09.2011
Сообщений: 147
|
|
рони, спасибо, но я, к сожалению, не смог разобраться
плагин добавляет в слова символы мягкого дефиса (shy), в том числе и дочерних html-элементах
получается типа: <div id="li-ne_bre-ak"></div>
или: <but-ton></but-ton>
сделал так:
Код:
|
<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;
}
.cyrillic{
width:100%;
height:20px;
margin-top:5px;
background-color:#06F;
}
</style>
<button onclick="transfer();">перенос текста</button>
<div id="test">
проверка переноса слов латиницы и Cyrillic по слогам
<div id="line_break"></div>
проверка переноса слов
<div class="cyrillic"></div>
<div style="width:100%;height:20px;margin-top:5px;background-color:#0F0;"></div>
</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);
});
//удалить символы мягкого дефиса (shy) в дочерних html-элементах
this.children().each(function(){
current_id = $(this).attr("id");
full_html = $(this).prop("outerHTML").replace(/(\­||)/gi, "");
$("#"+current_id).replaceWith(full_html);
});
};
function transfer(){
$("#test").hyphenate();
}
</script> |
теперь символы shy в дочерних html-элементах удалены, но только в элементах с id
мне нужно удаление этих символов во всех html-элементах, включая элементы без идентификатора
поэтому попытался сделать удаление символов в элементах с классом, но моя попытка не работает, проблема в replaceWith.
Не посмотрите?
//удалить символы мягкого дефиса (shy) в дочерних html-элементах с классом 'shy'
this.children().each(function(){
$(this).addClass("shy");
current_class = $(".shy").attr("class");
full_html = $(this).prop("outerHTML").replace(/(\­||)/gi, "");
$("."+current_class).replaceWith(full_html);
});
|
|

11.08.2025, 19:40
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,598
|
|
__________________
29375, 35
|
|

11.08.2025, 21:21
|
Кандидат Javascript-наук
|
|
Регистрация: 20.09.2011
Сообщений: 147
|
|
Сообщение от Aetae
|
hyphens: auto;
|
Aetae, спасибо, но css мне не нужен
|
|
|
|