Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2012, 17:14
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

раскрыть textarea
Как более эффективно раскрыть textarea на максимальную высоту и ширину его содержимого?

Моё замудрёное решение.
<style>
#test {
	resize: none;
	overflow: hidden;
	outline: none;
	border: none;
}
</style>

<textarea id="test" wrap="off" readonly="readonly">
<script>
	window.onload = function () {
		alert('hy');
	}
</script>
</textarea>

<script>
window.onload = function () {
	var ta = document.getElementById('test');
	var mas = ta.value.match(/(?=^).*(?=$)/gm);
	ta.rows = mas.length;
	 ta.cols = mas.map(function (el) {
			return el.length;
		}).sort(function (a, b) {
			return b - a;
		})[0] + 10; //поправка, так как часть текста оказывается закрытой
}
</script>


Попутные вопросы:
- можно ли в textarea настроить размер табуляции?
- есть ли css-аналоги wrap="off" и readonly="readonly"?

PS: предыстория задачи - писать код для вывода без замены <> на &lt;&gt;

Последний раз редактировалось bes, 09.10.2012 в 17:27.
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2012, 18:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Сообщение от bes
Как более эффективно раскрыть textarea на максимальную высоту и ширину его содержимого?
До этого предлагался вариант с ДИВом в который пишется тот же контент... Размер дива "передавался" текстареа...
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2012, 19:08
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от ksa
До этого предлагался вариант с ДИВом в который пишется тот же контент... Размер дива "передавался" текстареа...
можно поподробней об этом варианте (или ссылку)

<div id="div">
<script>
	alert('как быть');
	window.onload = function () {
		alert('hy');
	}
</script>
</div>
<textarea id="test" wrap="off" rdeadonly="readonly">
</textarea>

<script>
window.onload = function () {
	var ta = document.getElementById('test');
	var div = document.getElementById('div');
	ta.value = div.innerHTML;
}
</script>

Последний раз редактировалось bes, 09.10.2012 в 19:13.
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2012, 19:13
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

bes, http://learn.javascript.ru/metrics#javascript-метрики
Чуть ниже на странице: "Нажмите на кнопку, чтобы распахнуть элемент:"
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 09.10.2012, 19:22
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Сообщение от bes
можно поподробней об этом варианте
Идея там была такая...
- див располагают "под" текстареа
- все установки по отступам, полям и шрифтам у них одинаковы
- ввод в текстареа дублируют и в див, при этом считываются размеры дива и присваиваются текстареа

Т.о. их размеры будут кагбэ равны...
Ответить с цитированием
  #6 (permalink)  
Старый 09.10.2012, 19:26
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от nerv_
bes, http://learn.javascript.ru/metrics#javascript-метрики
Чуть ниже на странице: "Нажмите на кнопку, чтобы распахнуть элемент:"
ха, спасибо, сразу не сообразил применить этот способ для textarea, хотя не раз уже применял для других элементов (видимо из-за мысли, что он не совсем обычный )

<style>
#test {
	resize: none;
	overflow: hidden;
	outline: none;
	border: none;
}
</style>

<textarea id="test" wrap="off" readonly="readonly">
<script>
	alert();
	window.onload = function () {
		alert('hy');
	}
</script>
</textarea>

<script>
window.onload = function () {
	var ta = document.getElementById('test');
	var div = document.getElementById('div');
	ta.style.height = ta.scrollHeight;
	ta.style.width = ta.scrollWidth;
}
</script>

Последний раз редактировалось bes, 09.10.2012 в 23:55.
Ответить с цитированием
  #7 (permalink)  
Старый 09.10.2012, 19:34
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от ksa
Идея там была такая...
- див располагают "под" текстареа
- все установки по отступам, полям и шрифтам у них одинаковы
- ввод в текстареа дублируют и в див, при этом считываются размеры дива и присваиваются текстареа

Т.о. их размеры будут кагбэ равны...
не совсем понял, "под" - это между (тегами <textarea></textarea>)

но больше волнует то, что скрипт в диве ведь начинает исполняться
Ответить с цитированием
  #8 (permalink)  
Старый 09.10.2012, 19:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Сообщение от bes
не совсем понял, "под" - это между (тегами <textarea></textarea>)
У них z-index разный, ну и позиционирование конечно...
Т.о. див находится именно "под" текстареа и его не видно.
Ответить с цитированием
  #9 (permalink)  
Старый 09.10.2012, 20:06
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от ksa
У них z-index разный, ну и позиционирование конечно...
Т.о. див находится именно "под" текстареа и его не видно.
понял, о чём речь

через scrollHeight очевидно самый лучший вариант

Сообщение от bes
- можно ли в textarea настроить размер табуляции?
- есть ли css-аналоги wrap="off" и readonly="readonly"?
как насчёт этого? пока поиски приводят к выводу, что никак


PS: вообще так-то идея привлечения textarea была не в этой задаче, а в том, что htmtl-коде в тегах textarea пишем js-код в чистом виде (без ручных замен <> на &lt;&gt; )
далее программно делаем эти замены, переносим в html и делаем подсветку (textarea соответственно скрываем/удаляем)
Ответить с цитированием
  #10 (permalink)  
Старый 09.10.2012, 20:32
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

bes,

Можно без замены <> на &lt;&gt; использовать стандартный метод
document.createTextNode(text)

который отобразит содержимое просто как текст.

http://learn.javascript.ru/task/crea...e-vs-innerhtml
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновить textarea wp2 Events/DOM/Window 6 03.02.2012 23:44
bbcodes вставляются в чужой textarea foreach Events/DOM/Window 2 30.01.2012 21:15
С чего начать...автоматическое преобразование в bb-code в html внутри textarea javasc Events/DOM/Window 0 22.01.2011 06:37
Resize textarea, в копилку. Robox jQuery 0 17.01.2011 18:05
изменение размера textarea Vovan222 Общие вопросы Javascript 23 12.09.2010 20:14