帮助多浏览器contenteditable div

时间:2011-07-18 00:03:36

标签: jquery contenteditable

更新:

您可以在http://jsfiddle.net/sV3us/1/

查看代码

我有这个功能。它适用于非IE浏览器,但IE9无法正常工作。 我正在调用此函数 execCommandOnElement(testDiv,“insertHTML”,“some content”)

function execCommandOnElement(el, commandName, value) {
    if (typeof value == "undefined") {
        value = null;
    }

    if (typeof window.getSelection != "undefined") {
        // Non-IE case

        // Temporarily enable designMode so that
        // document.execCommand() will work
        document.designMode = "on";

        //place caret
        selection.collapse (anchorNode, anchorOffset);
        selection.extend( focusNode, focusOffset);

        // Execute the command
        document.execCommand(commandName, false, value);

        // Disable designMode
        document.designMode = "off";

    } 
    else if (typeof document.body.createTextRange != "undefined") {
    close_modal (); 
        // IE case
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        document.execCommand(commandName, false, value);
    }
}

我不需要在我的内容可编辑div中选择一些东西(例如粗体文本),我只需要IE粘贴放置插入符号的HTML。因为我需要使用对话框来获取要粘贴的内容,所以我使用此函数来知道放置它的位置。

//launch
$(".launch_modal").click(function() {
   open_modal ( $(this).attr( 'data-modal' ) );

    selection = window.getSelection() ; 
    anchorNode = selection.anchorNode;
    anchorOffset = selection.anchorOffset;
    focusNode = selection.focusNode;
    focusOffset = selection.focusOffset;               
});

我非常感谢你的帮助。我整天都在这里。

1 个答案:

答案 0 :(得分:2)

昨天我给了你code to help with this。也许您没有意识到保存插入位置与保存选择完全相同?此外,您不需要execCommandOnElement()函数为您执行的操作:启用designMode的内容仅用于处理不可编辑的内容,因此您可以完全删除此函数并使用{ {1}}。

您的代码不起作用的一个原因是IE 9支持document.execCommand(),但不支持选择的非标准window.getSelection()方法。

以下是我认为你想要的一个例子:

jsFiddle:http://jsfiddle.net/nmd3A/2/

代码:

extend()