Получение позиции курсора в 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 кода, так же нужно и изменять положение курсора после вставки кода. Может кто-нибудь уже сталкивался с этой задачей и имеются наработки? |
Вот, нашел на просторах интернета, вроде работает
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);
}
}
}
|
vanicon,
Цитата:
Демо |
рони, Спасибо, не натыкался почему-то на эту статью
|
| Часовой пояс GMT +3, время: 09:25. |