Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение позиции курсора в div (https://javascript.ru/forum/events/49458-poluchenie-pozicii-kursora-v-div.html)

vanicon 14.08.2014 02:46

Получение позиции курсора в div
 
Всем привет.
Есть див с contenteditable=true и необходимо добавить возможность вставки смайликов.
Полазив по интернету нашел вот такое решение:
function getCaretPos(element) {
	element.focus();
	if (document.selection) {
		var sel = document.selection.createRange();
		var clone = sel.duplicate();
		sel.collapse(true);
		clone.moveToElementText(element);
		clone.setEndPoint('EndToEnd', sel);
		return clone.text.length;
	} else {
		return window.getSelection().getRangeAt(0).startOffset;
	}
	return 0;
}

И вроде бы работает, но позиция курсора возвращается без учета html кода, так же нужно и изменять положение курсора после вставки кода.
Может кто-нибудь уже сталкивался с этой задачей и имеются наработки?

vanicon 16.08.2014 16:01

Вот, нашел на просторах интернета, вроде работает
function insertNodeOverSelection(node, containerNode) {
	var sel, range, html;
	if (window.getSelection) {
		sel = window.getSelection();
		if (sel.getRangeAt && sel.rangeCount) {
			range = sel.getRangeAt(0);
			if (isOrContainsNode(containerNode, range.commonAncestorContainer)) {
				range.deleteContents();
				range.insertNode(node);
				range = range.cloneRange();
				range.setStartAfter(node);
				range.collapse(true);
				sel.removeAllRanges();
				sel.addRange(range);
			} else {
				containerNode.appendChild(node);
			}
		}
	} else if (document.selection && document.selection.createRange) {
		range = document.selection.createRange();
		if (isOrContainsNode(containerNode, range.parentElement())) {
			html = (node.nodeType == 3) ? node.data : node.outerHTML;
			range.pasteHTML(html);
		} else {
			containerNode.appendChild(node);
		}
	}
}

рони 16.08.2014 16:10

vanicon,
Цитата:

В статье описывается опыт создания текстового поля с возможностью вставки смайлов
http://habrahabr.ru/post/232965/
Демо

vanicon 16.08.2014 16:18

рони, Спасибо, не натыкался почему-то на эту статью


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