单击contenteditable元素(div)中的按钮后,如何将光标位置设置为上一个位置?

我建立了一个自己的所见即所得编辑器。

我有这个简单的html

<div contenteditable="true" class="editor"></div>

当我在div中选择文本时:

单击contenteditable元素(div)中的按钮后,如何将光标位置设置为上一个位置?

,然后按“ B”按钮将所选文本加粗:

单击contenteditable元素(div)中的按钮后,如何将光标位置设置为上一个位置?

我的光标在第一行中,在“ hello”一词之前。 我想要的是,光标位于加粗文本的后面。

当我单击按钮时,将调用此函数:(参数元素为:“ b”)

    function handleToolbarButtonClick(element) {
        let selection = window.getSelection();
        let editor = $('.wysiwyg-editor .editor[contenteditable]');

        if (selection.baseOffset === selection.anchorOffset &&
            selection.baseOffset === selection.extentOffset &&
            selection.baseOffset === selection.focusOffset) {
            //Toggle the html element tag.
            Wysiwyg.config.tags[element].enabled = Wysiwyg.config.tags[element].enabled
                ? false
                : true;
        } else {
            //Wrap the selected text
            wrapSelectedText(element);
        }

        //Focus editor to set the cursor position
        let range = new Range();

        editor.focus();

    }

当我单击按钮并且未选择任何内容时,我想启用粗体样式。 是否选择了内容,我想用此功能包装内容。

    function wrapSelectedText(wrapelement) {
        if (window.getSelection) {
            // not IE case
            let selectedText = window.getSelection();
            let selectedRange = selectedText.getRangeAt(0);

            let newElement = document.createElement(wrapelement);
            let documentFragment = selectedRange.extractContents();
            newElement.appendChild(documentFragment);
            selectedRange.insertNode(newElement);

            selectedText.removeAllRanges();
        } else if (document.selection && document.selection.createRange && document.selection.type !== "None") {
            // IE case
            let range = document.selection.createRange();
            let selectedText = range.htmlText;
            let newText = '<' + wrapelement + '>' + selectedText + '</' + wrapelement + '>';
            document.selection.createRange().pasteHTML(newText);
        }
    }

如果仅将enable属性切换为粗体并使编辑器聚焦,则光标将位于旧位置。 但是我不知道如何将光标设置为最后一个位置,或者将光标设置为加粗的单词的末尾。

你知道吗?

当我单击按钮并且所选文本以粗体显示时,您知道删除粗体标记的好方法吗?

国王问候

P.S .:我在Codepen上创建了此函数 Example

sdl2874 回答:单击contenteditable元素(div)中的按钮后,如何将光标位置设置为上一个位置?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3157184.html

大家都在问