Показать сообщение отдельно
  #6 (permalink)  
Старый 11.08.2025, 17:17
Кандидат Javascript-наук
Отправить личное сообщение для sashgera Посмотреть профиль Найти все сообщения от sashgera
 
Регистрация: 20.09.2011
Сообщений: 147

Сообщение от рони Посмотреть сообщение
sashgera,
пример обработки только текста и просто по теме переноса ...
пост #32 строки 70 - 75
https://javascript.ru/forum/misc/843...-slogam-4.html
рони, спасибо, но я, к сожалению, не смог разобраться

плагин добавляет в слова символы мягкого дефиса (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(/(\&shy;|­|­)/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(/(\&shy;|­|­)/gi, "");
	$("."+current_class).replaceWith(full_html);
});
Ответить с цитированием