Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Перенос строки при транслитерации (https://javascript.ru/forum/dom-window/76345-perenos-stroki-pri-transliteracii.html)

Янковиц 02.01.2019 11:04

Перенос строки при транслитерации
 
Добрый день. Есть функция:
function translit_to_eng(txt) {
	match  = new Array
("a","b","v","q","d","e","ə","j","z","i","y","k","l","m","n","o","p", "r","s","t","u","f","x","c","ç","ş","h","ı","ğ","g","ö","ü","A","B", "V","Q","D","E","Ə","J","Z","İ","Y","K","L","M","N","O","P","R", "S","T","U","F","X","C","Ç","Ş","H","I","Ğ","G","Ö","Ü","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	replace = new Array
("а","б","в","г","д","е","ә","ж","з","и","ј","к","л","м","н","о","п", "р","с","т","у","ф","х","ҹ","ч","ш","һ","ы","ғ","ҝ","ө","ү","А","Б", "В","Г","Д","Е","Ә","Ж","З","И","Ј","К","Л","М","Н","О","П","Р", "С","Т","У","Ф","Х","Ҹ","Ч","Ш","Һ","Ы","Ғ","Ҝ","Ө","Ү","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	Input = txt;
	Output = "";
	for(var i=0;i<Input.length;i++) {
		ch = "";
		for(var j=0;j<match.length;j++)
			if(Input.charAt(i) == match[j])
				ch = replace[j];
		Output += ch;
	}
	return Output;
}

Производи транслитерацию с одних символов на другие. Однако перенос строк не работает. Подскажите, как решить проблему?

рони 02.01.2019 11:25

Янковиц,
где пример с проблемой?
в коде ниже её нет.
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>
<textarea name="" rows="8">
       test
 test
</textarea>

 <script>
function translit_to_eng(txt) {
	match  = new Array
("a","b","v","q","d","e","ə","j","z","i","y","k","l","m","n","o","p", "r","s","t","u","f","x","c","ç","ş","h","ı","ğ","g","ö","ü","A","B", "V","Q","D","E","Ə","J","Z","İ","Y","K","L","M","N","O","P","R", "S","T","U","F","X","C","Ç","Ş","H","I","Ğ","G","Ö","Ü","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	replace = new Array
("а","б","в","г","д","е","ә","ж","з","и","ј","к","л","м","н","о","п", "р","с","т","у","ф","х","ҹ","ч","ш","һ","ы","ғ","ҝ","ө","ү","А","Б", "В","Г","Д","Е","Ә","Ж","З","И","Ј","К","Л","М","Н","О","П","Р", "С","Т","У","Ф","Х","Ҹ","Ч","Ш","Һ","Ы","Ғ","Ҝ","Ө","Ү","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	Input = txt;
	Output = "";
	for(var i=0;i<Input.length;i++) {
		ch = "";
		for(var j=0;j<match.length;j++)
			if(Input.charAt(i) == match[j])
				ch = replace[j];
		Output += ch;
	}
	return Output;
}
var elem = document.querySelector("textarea"),
    text = elem.value;
elem.value = translit_to_eng(text)
  </script>
</body>
</html>

рони 02.01.2019 11:29

Янковиц,
попробуйте так
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>
<textarea name="" rows="8">
       test
 test
</textarea>

 <script>
function translit_to_eng(txt) {
	match  = new Array
("a","b","v","q","d","e","ə","j","z","i","y","k","l","m","n","o","p", "r","s","t","u","f","x","c","ç","ş","h","ı","ğ","g","ö","ü","A","B", "V","Q","D","E","Ə","J","Z","İ","Y","K","L","M","N","O","P","R", "S","T","U","F","X","C","Ç","Ş","H","I","Ğ","G","Ö","Ü","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	replace = new Array
("а","б","в","г","д","е","ә","ж","з","и","ј","к","л","м","н","о","п", "р","с","т","у","ф","х","ҹ","ч","ш","һ","ы","ғ","ҝ","ө","ү","А","Б", "В","Г","Д","Е","Ә","Ж","З","И","Ј","К","Л","М","Н","О","П","Р", "С","Т","У","Ф","Х","Ҹ","Ч","Ш","Һ","Ы","Ғ","Ҝ","Ө","Ү","1","2","3","4","5","6","7","8","9","0","?","!","-"," ",":",",",".","\n");
	Input = txt;
	Output = "";
	for(var i=0;i<Input.length;i++) {
		ch = Input.charAt(i);
		for(var j=0;j<match.length;j++)
			if(ch == match[j])
				ch = replace[j];
		Output += ch;
	}
	return Output;
}
var elem = document.querySelector("textarea"),
    text = elem.value;
elem.value = translit_to_eng(text)
  </script>
</body>
</html>

Янковиц 02.01.2019 11:39

Функция повешена на обработчик:
$('#eng').keyup(function(){
		var txt = $(this).val();
		var result = translit_to_eng(txt);
		$('#rus').text(result);
		return false;
    });

То есть, при вставке текста все переносы исчезают

laimas 02.01.2019 11:50

Цитата:

Сообщение от Янковиц
То есть, при вставке текста все переносы исчезают

В HTML перенос, это <br>.

Янковиц 02.01.2019 12:01

То есть, в массиве replace нужно заменить \n на <br>?

laimas 02.01.2019 12:11

Цитата:

Сообщение от Янковиц
То есть, в массиве replace нужно заменить \n на <br>?

Ну если вставляется текст в элемент $('#rus').text(result);, то ожидать, что будет перенос по \n не стоит, нужно вставлять как html, а значит не \n, а <br>. В коде рони явно же указывается на вашу проблему - ложные ожидания.

laimas 02.01.2019 12:22

Кстати, заменять надо не \n, а в зависимости от платформы источника текста, а это могут быть: \r, \n или \r\n.


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