Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2022, 14:26
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Обрамление тегами выделенного текста
Не хочется изобретать велосипед: эта функция работает во многих движках форумов, включая и этот. Нажимаешь на кнопку "Вставить ссылку" и выходит всплывающее окно, которое, после ввода необходимой информации вставляет её в выделенный текст.

Вот, пример: форум <- сделанный скриптом данного движка.

Вопрос: где найти читабельный пример подобного кода? Понимаю, что это где-то в файле типа ckeditor.js, но JS код там сжат и достать его быстро не получается. Есть примеры на Stack Overflow, но там без всплывающего окна для ввода URL.
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2022, 07:00
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

<script>
function addLink() {
	const textarea = document.querySelector("TextArea");
	const text = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
	const href = prompt("Адрес ссылки", "https://javascript.ru/forum/misc/");
	textarea.value = `${textarea.value.substr(0, textarea.selectionStart)}<a href='${href}'>${text}</a>${textarea.value.substr(textarea.selectionEnd)}`;
	document.body.appendChild(code);
}
</script>
<body>
<button onclick='addLink()'>Добавить ссылку</button>
<textarea>Ссылка#1 Ссылка№2</textarea>
</body>

Последний раз редактировалось Alikberov, 24.10.2022 в 07:18.
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2022, 07:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alikberov,
а выделенный текст где? автор просит это
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2022, 07:19
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

Сообщение от рони Посмотреть сообщение
Alikberov,
а выделенный текст где? автор просит это
Упс. Поправил.
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2022, 07:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alikberov,
после строки 5
if(!href) return;
и
if(!text) text = href;
или так
<a href='${href}'>${text||href}
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2022, 08:01
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

Сообщение от рони Посмотреть сообщение
Alikberov
A не слишком ли упрощаем задачу?
Лет 20 тому назад на уроках Лого не все понимали, почему вторичный запуск кода выдавал ошибку, так как не догадывались поставить черепашку в исходную точку.
Ответить с цитированием
  #7 (permalink)  
Старый 25.10.2022, 21:28
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Всем спасибо, но "не работает".

Точнее: сам пример решения конечно рабочий, но как только начинаешь его встраивать в свою систему - отказ. Пробовал 2 варианта:

1. Целиком указанный код на страницу перлового скрипта. Получаю серверную ошибку: Not enough arguments for substr at ... near "selectionEnd)"
Ругается вот на эту строку:
textarea.value = `${textarea.value.substr(0, textarea.selectionStart)}<a href='${href}'>${text}</a>${textarea.value.substr(textarea.selectionEnd)}`;

Почему Perl падает из-за JS сказать затрудняюсь.

2. Вынос скрипта во внешний файл выдает следующую ошибку: "addLink" не определено.

Вроде бы всё правильно, но не работает - ничего не происходит. Да, "button" заменил на
<a href="#" onclick="addLink()">Add Link</a>


Буду признателен за подсказку: что я сделал не так?
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2022, 06:00
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

<script>
function addLink(button) {
	const textarea = button.parentNode.TextAreaTag;
	const href = prompt("Адрес ссылки", "https://javascript.ru/forum/misc/");
	const text = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd) || href;
	if(!href)
		return;
*!*
	// Определите один из этих двух рабочих вариантов
	if("ticks" in button.dataset)
		textarea.value = `${textarea.value.substr(0, textarea.selectionStart)}<a href='${href}'>${text}</a>${textarea.value.substr(textarea.selectionEnd)}`;
	else
		textarea.value = textarea.value.substr(0, textarea.selectionStart) + "<a href='" + href + "'>" + text + "</a>" + textarea.value.substr(textarea.selectionEnd);
*/!*
	document.body.appendChild(code);
}
</script>
<body>
<form>
<a href='#' onclick='addLink(this)' data-ticks><img src='https://javascript.ru/forum/images/editor/createlink.gif'></a>
<a href='#' onclick='addLink(this)'><img src='https://javascript.ru/forum/images/editor/createlink.gif'></a><br>
<textarea name=TextAreaTag rows=3 cols=80>
Ссылка#1
Ссылка№2
</textarea>
</form>
</body>

Последний раз редактировалось Alikberov, 26.10.2022 в 06:26.
Ответить с цитированием
  #9 (permalink)  
Старый 26.10.2022, 08:47
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Вот этот вариант со строкой
textarea.value = textarea.value.substr(0, textarea.selectionStart) + "<a href='" + href + "'>" + text + "</a>" + textarea.value.substr(textarea.selectionEnd);

мне более понятен и он работает в моем случае. Спасибо!

Но есть еще 1 нюанс. В моем случае в форме используются 2 textarea, но мне бы хотелось обойтись одной кнопкой для них. В любом случае выделить текст можно только в одной textarea, соответственно в нее и надо вставлять модифицированную строку. Вопрос: чем заменить "textarea.value"? Ведь у нас две одинаковых textarea, естественно с разными именами и идентификаторами.
Ответить с цитированием
  #10 (permalink)  
Старый 26.10.2022, 09:30
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

<script>
function addLink(button) {
	if(button.parentNode.dataset.focused) {
		const textarea = button.parentNode[button.parentNode.dataset.focused];
		const href = prompt("Адрес ссылки", "https://javascript.ru/forum/misc/");
		const text = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd) || href;
		const pos = textarea.selectionStart;
		if(href)
			textarea.value = textarea.value.substr(0, textarea.selectionStart) + "<a href='" + href + "'>" + text + "</a>" + textarea.value.substr(textarea.selectionEnd);
		textarea.focus();
		textarea.selectionStart = textarea.selectionEnd = pos;
	}
}
</script>

<body>
<form data-focused>
<a href='#' onclick='addLink(this)'><img src='https://javascript.ru/forum/images/editor/createlink.gif'></a><br>
<textarea name=TextAreaTag rows=3 cols=80 onfocus='this.parentNode.dataset["focused"] = this.name'>
Ссылка#1
Ссылка№2
</textarea><br>
<textarea name=TextAreaTaq rows=3 cols=80 onfocus='this.parentNode.dataset["focused"] = this.name'>
Ссылка#3
Ссылка№4
</textarea>
</form>
</body>

Последний раз редактировалось Alikberov, 26.10.2022 в 09:36.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью скрипта высчитать ширину полосы прокрутки? LADYX Элементы интерфейса 35 13.11.2017 12:50
Получить координаты области выделенного текста oleg.oreshenko Общие вопросы Javascript 0 06.12.2013 11:15
Вывод выделенного текста в форме другого окна Mrjoey Events/DOM/Window 10 22.06.2011 22:31
позиция выделенного текста в textarea, начало/конец `p r o x y jQuery 3 07.05.2009 09:08
Замена выделенного текста alexKniaz Общие вопросы Javascript 0 27.10.2008 23:25