• Как заставить правильно работать каретку?

    @itlogunov Автор вопроса
    Решил так:
    $.extend( {
    		    saveSelection: function() {
    		        SelectionProvider = new Object();
    		 
    		        if (window.getSelection) {
    		            sel = window.getSelection();
    		            if (sel.getRangeAt && sel.rangeCount) {
    		                SelectionProvider.storedSelection = sel.getRangeAt(0);
    		            }
    		        } else if (document.selection && document.selection.createRange) {
    		            SelectionProvider.storedSelection = document.selection.createRange();
    		        }
    		        // SelectionProvider.storedSelection = null;
    		         
    		    }
    		});
    
    		$.extend( {
    		    restoreSelection: function() {
    		         
    		        var range = SelectionProvider.storedSelection;
    		        if (range) {
    		            if (window.getSelection) {
    		                sel = window.getSelection();
    		                sel.removeAllRanges();
    		                sel.addRange(range);
    		            } else if (document.selection && range.select) {
    		                range.select();
    		            }
    		        }
    		         
    		    }
    		});
    
    		$.extend( {
    		    pasteHtmlAtCursor: function(html) {
    		        var sel, range;
    		        if (window.getSelection) {
    		            sel = window.getSelection();
    		            if (sel.getRangeAt && sel.rangeCount) {
    		                range = sel.getRangeAt(0);
    		                range.deleteContents();
    		 
    		                var el = document.createElement("div");
    		                el.innerHTML = html;
    		                var frag = document.createDocumentFragment(), node, lastNode;
    		                while ((node = el.firstChild)) {
    		                    lastNode = frag.appendChild(node);
    		                }
    		                range.insertNode(frag);
    		 
    		                if (lastNode) {
    		                    range = range.cloneRange();
    		                    range.setStartAfter(lastNode);
    		                    range.collapse(true);
    		                    sel.removeAllRanges();
    		                    sel.addRange(range);
    		                }
    		            }
    		        } else if (document.selection && document.selection.type != "Control") {
    		            document.selection.createRange().pasteHTML(html);
    		        }      
    		    }
    		});


    затем когда нужно сохранить курсор ставим
    $.saveSelection(); //сохраняем позицию курсора

    и вставляем
    $.restoreSelection(); //загружаем позицию курсора
    $.pasteHtmlAtCursor(html); //вставляем код
    Ответ написан
    Комментировать
  • Вставка радио кнопок после пробела?

    @itlogunov Автор вопроса
    Ответ написан
    Комментировать
  • А можно установить координаты каретки в contenteditable блоке?

    @itlogunov
    <div class="edit" contenteditable>
    текст
    </div>

    $(document).on('keyup', '.edit', function(e){
       insertCurrentPlace = ''; // ловим текущий тег
       caret = ''; // положение каретки
       caret = window.getSelection().anchorOffset;
       if (window.getSelection().anchorNode.nodeName == '#text') {
    	insertCurrentPlace = window.getSelection().anchorNode.parentNode;
       } else {
    	insertCurrentPlace = window.getSelection().anchorNode;
       }
       console.log(caret);
    });
    Ответ написан
    Комментировать
  • Как перенести текст на новую страницу?

    @itlogunov Автор вопроса
    Так я ушел с одного дива из-за невозможности отслеживать высоту страниц
    Ответ написан