【问题标题】:Javascript - jHtmlArea, set cursor positionJavascript - jHtmlArea,设置光标位置
【发布时间】:2011-11-16 10:33:53
【问题描述】:

我正在使用 jHtmlArea,但我猜这个问题与任何使用 iframe/文档编辑模式来运行的 html 文本框有关。

使用 pasteHTML 函数将一些文本设置到 jHtmlArea 中,我想将光标放在我插入的文本之后,有什么好的方法吗?

【问题讨论】:

    标签: javascript jhtmlarea


    【解决方案1】:

    我建议将 jHtmlArea 的 pasteHTML 实现替换为不使用浏览器嗅探、在浏览器之间保持一致并将插入符号放在插入内容之后的有能力的实现。类似于以下内容,改编自我在这里的回答:Insert html at caret in a contenteditable div

    jHtmlArea.prototype.pasteHTML = function(html) {
        var sel, range, iframe = this.iframe[0],
            win = iframe.contentWindow || iframe.contentDocument.defaultView,
            doc = win.document;
    
        win.focus();
        if (win.getSelection) {
            // IE9 and non-IE
            sel = win.getSelection();
            if (sel.getRangeAt && sel.rangeCount) {
                range = sel.getRangeAt(0);
                range.deleteContents();
    
                // Range.createContextualFragment() would be useful here but is
                // not supported in all browsers (IE9, for one)
                var el = document.createElement("div");
                el.innerHTML = html;
                var frag = doc.createDocumentFragment(), node, lastNode;
                while ( (node = el.firstChild) ) {
                    lastNode = frag.appendChild(node);
                }
                range.insertNode(frag);
    
                // Preserve the selection
                if (lastNode) {
                    range = range.cloneRange();
                    range.setStartAfter(lastNode);
                    range.collapse(true);
                    sel.removeAllRanges();
                    sel.addRange(range);
                }
            }
        } else if ( (sel = doc.selection) && sel.type != "Control") {
            // IE < 9
            sel.createRange().pasteHTML(html);
        }
    }
    

    【讨论】:

    • 这是默认 pasteHTML 方法的一个很好的替代方法。它真的很好用。在 IE7/8/9、Firefox、Chrome 下测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多