Devil198711,
редакторы по ссылке выше, содержат все необходимые вам решения, в том числе и на js, нужно только читать их код. |
contenteditable возвращение курсора в конец выделения
Devil198711,
возможно есть проще варианты
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
window.addEventListener('DOMContentLoaded', function() {
var myTextArea = document.querySelector('#myTextArea'),
but = document.querySelector('#but');
but.addEventListener('click', function() {
if(!window.getSelection().anchorNode) return;
var selection = window.getSelection().getRangeAt(0);
var selectedText = selection.extractContents();
var tagname = document.createElement('b');
tagname.appendChild(selectedText);
if(tagname.textContent.length) {
selection.insertNode(tagname);
var range = document.createRange();
range.setStart(tagname.childNodes[0], tagname.textContent.length);
range.collapse(true);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
else myTextArea.focus()
});
});
</script>
</head>
<body>
<div id="myTextArea" style="background: #ccc" contenteditable="true">
текст <br />ещё текст<br />и ещё
</div>
<br />
<input type="button" value="Вставить тег b" id="but">
</body>
</html>
|
Цитата:
Спасибо, но проблемы с вставкой тегов я решил уже, единственное что мне никак не поддается это вернуть выделение в прежнее положение при потере фокуса редактора. То есть когда я нажимаю на кнопку вставки ссылки появляется модальное окно с тремя полями форм (урл, текст ссылки, тайтл), и при установке курсора в любое поле редактор теряет фокус и ответственно забывает выделенный текст, вот я и не могу понять как при нажатии кнопки "вставить ссылку" заменить выделенный текст или вставить там где была каретка |
Devil198711,
не понимаю, разве код выше не решает ваши проблемы? что мешает сохранить выделение и вернуть обратно? код перед вами |
Devil198711,
медитировать здесь https://learn.javascript.ru/range-textrange-selection |
Цитата:
|
Всем спасибо за помощь, вот что у меня получилось
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="editor" style="border:1px dashed #999; color:#666; background:#EEE; padding:2px 5px; margin:10px 0;" contenteditable>
какой-то текст
</div>
<div>
<input onclick="setSelection()" type="button" value="Выделить">
<input onclick="saveSelection()" type="button" value="Сохранить выделение">
</div>
<script>
var wsEditor = document.getElementById('editor');
var wsSelection;
function setSelection() {
if (wsSelection) {
var sel = window.getSelection();
var rng = document.createRange();
rng.selectNode(wsEditor);
rng.setStart(wsSelection.startContainer, wsSelection.startOffset);
rng.setEnd(wsSelection.endContainer, wsSelection.endOffset);
sel.removeAllRanges();
sel.addRange(rng);
}
}
function saveSelection() {
wsEditor.focus()
var sel = window.getSelection();
if (sel.anchorNode) {
wsSelection = sel.getRangeAt(0);
}
}
</script>
</body>
|
Devil198711,
добавьте run в пост №17 [HTML run][/HTML] |
Подскажите как получить картинку которая в данный момент выделена
|
смотря как выделена.
event.target ссылка на объект вызвавший событие. |
| Часовой пояс GMT +3, время: 19:06. |