Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Убрать отступы в многострочном тексте (https://javascript.ru/forum/dom-window/55874-ubrat-otstupy-v-mnogostrochnom-tekste.html)

rafaello 18.05.2015 20:31

Убрать отступы в многострочном тексте
 
Приветствую всех!
Башку уже поломал, подмогните советом!
Есть многострочный текст
var text = "tra-ta ta
                                 tra-ta ta
              tra-ta ta
                                                     tra-ta ta
                   tra-ta ta";

Задачка такая, чтобы убрать пробелы в начале и конце строк и привести к такому виду:
var text = "tra-ta ta
tra-ta ta
tra-ta ta
tra-ta ta
tra-ta ta";

Если бы на языке PHP, я бы сделал за пару минут, но в javascript совсем плаваю. Вот соорудил что-то такое, но это не работает:
var arr = text.split("\n");
var index;
var ddrr = '';
for (index = 0; index < arr.length; ++index) {
    ddrr = $.trim(arr[index]) + "\n";
	ddrr = ddrr + ddrr;
}

kostyanet 18.05.2015 21:10

Это вам регу надо сделать, я не умею, но точно знаю что есть такая, которая все доп.пробелы выпиливает влет.

UPD http://stackoverflow.com/questions/1...a-single-space

rafaello 18.05.2015 21:12

Вопрос в Реге - это вопрос второй!
Первый вопрос - как собрать файл воедино после цикла?

laimas 18.05.2015 21:25

Цитата:

Сообщение от rafaello
Если бы на языке PHP, я бы сделал за пару минут, но в javascript совсем плаваю.

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

Соединение элементов в строку, это string.join('\n');

рони 18.05.2015 21:33

rafaello,
<!DOCTYPE HTML>

<html>

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

<body>
 <textarea name="" rows="10" cols="80">tra-ta ta
                                 tra-ta ta
              tra-ta ta
                                                     tra-ta ta
                   tra-ta ta</textarea>
 <textarea name="" rows="10" cols="80"></textarea>
 <script>
    var t = document.querySelectorAll("textarea");
    var text = t[0].value;
    text = text.replace(/^\s+|\s+(?=[\n\r])/gm,"")
    t[1].value = text
 </script>
</body>

</html>

kostyanet 18.05.2015 21:41

Цитата:

Сообщение от rafaello
Первый вопрос - как собрать файл воедино после цикла

Никакого цикла там нет, снаружи по крайней мере. В ощем вам уже все продемонстрировали.

laimas 18.05.2015 21:48

рони,
если в textarea, то вообще ничего не надо. Серверу один раз при записи сделать, а не постоянно при каждом изменении значения в поле перебирать все заново на клиенте. )

рони 18.05.2015 22:03

laimas,
textarea только для примера, потому что переменная в 1 посте не корректна

rafaello 18.05.2015 23:47

Цитата:

Ну так почему не делается на сервере, откуда на клиенте этот текст берется?
Так это не на сервере делается, а в браузере -"Получить TXT из HTML".
Там javascript вырезает все теги html.
---------------------------------------------------------
РОНИ, большое спасибо за помощь!
Хотя в упор не понял, как это без цикла так получилось...

рони 19.05.2015 00:13

Цитата:

Сообщение от rafaello
как это без цикла так получилось...

https://learn.javascript.ru/regexp-methods

rafaello 19.05.2015 00:19

Я попробовал в песочнице, и получается так, что если убрать второй <textarea name="" rows="10" cols="80"></textarea>
то ничего и не получается....
Сейчас попытаюсь объяснить суть самой задачи.
Есть два textarea с разными Ай-ди. В первом находится текст в виде html кода.
За одно действие (один клик) надо вытащить тот текст из первого textarea, очистить от html тегов, в каждой строке убрать пробелы и вставить во второй textarea.
Вся эта функция уже написана, но в ней не хватает момента очистки от пробелов.
Поэтому, используя вариант профессора Рони, я не смогу сделать того, что мне надо.
Хотя и свой первоначальный вариант я додумал. Плохо ли хорошо, но он работает.
Было
var arr = text.split("\n");
var index;
var ddrr = '';
for (index = 0; index < arr.length; ++index) {
    ddrr = $.trim(arr[index]) + "\n";
	ddrr = ddrr + ddrr;
}

Стало
var arr = text.split("\n");
var index;
var ddrr = '';
for (index = 0; index < arr.length; ++index) {
    ddrr = ddrr + $.trim(arr[index]) + "\n";
}

рони 19.05.2015 00:48

rafaello,
а чем неустроило
var ddrr = text.replace(/^\s+|\s+(?=[\n\r])/gm,"")
?

laimas 19.05.2015 03:20

Цитата:

Сообщение от rafaello
надо вытащить тот текст из первого textarea, очистить от html тегов, в каждой строке убрать пробелы и вставить во второй textarea.

Вопрос - а зачем вставлять во вторую текстовую область и даже зачем вообще нужна вторая текстовая область, если только не для того, чтобы это в конечном итоге не отправить на сервер?

kostyanet 19.05.2015 05:27

Цитата:

Сообщение от rafaello
За одно действие (один клик) надо вытащить тот текст из первого textarea, очистить от html тегов, в каждой строке убрать пробелы и вставить во второй textarea.

И нафига козе баян из циклов и прочей тряхомудии? Потому что сами написали и полюбили?

Избавиться от тегов можно двояковыпукло: или засадив хтмл в дом и достав оттуда textContent (innerText) - что небезопасно если нет гарантий чистоты хтмля; или регой, или скачать готовую функцию strip_tags() и все такое.

http://phpjs.org/functions/strip_tags/

а тут та самая рега в 1 строку

https://css-tricks.com/snippets/java...in-javascript/

kostyanet 19.05.2015 05:32

Проблема с функциями в том, что специальные символы не конвертятся. Например там написано &hellip; - ну так и получите в тексте, вместо ...

Поэтому бестовым способом является компиляция в дом и забор оттуда текста как текста. Но если в хтмле будет скрипт, он сработает.

Чтобы конвертировать туда-сюда функциями, я укоротил список ентитек функции html_entity_decode до практического минимума и засунул в свою либу, вот так:

var html_entity_decode=function(str) {
	var m={"194":"&iquest;","195":"&yuml;","197":"&Yuml;","198":"&fnof;","203":"&tilde;","206":"&omicron;","207":"&piv;","226":"&diams;","38":"&amp;","34":"&quot;","39":"&#039;","60":"&lt;","62":"&gt;"},d=0;
	for(d in m)
		str=str.split(m[d]).join(String.fromCharCode(d));
	return str;
};

rafaello 19.05.2015 07:06

Цитата:

если только не для того, чтобы это в конечном итоге не отправить на сервер?
Именно для этого это и надо :)
Цитата:

а чем неустроило
var ddrr = text.replace(/^\s+|\s+(?=[\n\r])/gm,"")

Отчего же, это как раз и устраивает! :thanks:
Всем спасибо!

laimas 19.05.2015 11:57

Цитата:

Сообщение от rafaello
Именно для этого это и надо

Ну и почему не "если бы это было на РНР, я бы его заразу в два счета уделал"? :)


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