简体   繁体   English

Javascript document.execCommand“粗体”在Chrome中不起作用

[英]Javascript document.execCommand “bold” not working in chrome

I;m creating a text editor, and I'm using document.execCommand for styling purposes on my div, which is contend Editable. 我正在创建一个文本编辑器,并且在div上使用document.execCommand进行样式设置,这被称为Editable。 All other functions like underlining, italicizing, justifying, etc.. work, except for bold. 除粗体外,所有其他功能(如下划线,斜体,对正等)均起作用。 I can't figure out why. 我不知道为什么。 Here is the code I'm using: 这是我正在使用的代码:

function makeEditableAndHighlight(styleType, optParam) {
    if(typeof(optParam) == "undefined" || optParam == null){
        optParam = null;
    }
    var range, sel = window.getSelection();
    if (sel.rangeCount && sel.getRangeAt) {
        range = sel.getRangeAt(0);
    }
    document.designMode = "on";
    if (range) {
        sel.removeAllRanges();
        sel.addRange(range);
    }
    // Use HiliteColor since some browsers apply BackColor to the whole block
    /*if (!document.execCommand("HiliteColor", false, colour)) {
        document.execCommand("BackColor", false, colour);
    }*/
    document.execCommand(styleType, false, optParam);
    document.designMode = "off";
}

function changeTextStyle(styleType, optParam){
    if(typeof(optParam) == "undefined" || optParam == null){
        optParam = null;
    }
    var range;
    if (window.getSelection) {
        // IE9 and non-IE
        try {
            /*if (!document.execCommand("BackColor", false, colour)) {
                makeEditableAndHighlight(colour);
            }*/
            if (!document.execCommand(styleType, false, optParam)) {
                makeEditableAndHighlight(styleType, optParam);
            }
        } catch (ex) {
            makeEditableAndHighlight(styleType, optParam)
}
    } else if (document.selection && document.selection.createRange) {
        // IE <= 8 case
        range = document.selection.createRange();
        range.execCommand(styleType, false, optParam);
        //range.execCommand("BackColor", false, colour);
    }
}

I call it by using changeTextStyle("bold"); 我用changeTextStyle("bold");来称呼它changeTextStyle("bold"); or whatever style inside the quotation marks. 或引号内的任何样式。

This code has been working perfectly for every other style command, except bold. 该代码对于除粗体以外的所有其他样式命令都运行良好。 I'm calling it through the click of a button and it applies the style to the contenteditable div. 我通过单击按钮来调用它,它将样式应用于contenteditable div。 I did get it to work once, and that was if the all the div contents were selected, other than that it won't work at all. 我确实让它工作一次,那就是如果所有div内容都被选中,那它根本就行不通。 any help would be nice, thanks! 任何帮助都很好,谢谢!

Try this 尝试这个

    <button id="bold" onclick="FormatText('bold');"> </button>

And for Save selection and Restore selection use following code 对于保存选择和还原选择,请使用以下代码

      function saveSel() {
        if (window.getSelection)//non IE Browsers
        {
            savedRange = window.getSelection().getRangeAt(0);
        }
        else if (document.selection)//IE
        {
            savedRange = document.selection.createRange();
        }
    }

    //to restore sel
    function restoreSel() {
        $('#contenteditableId').focus();
        if (savedRange != null) {
            if (window.getSelection)//non IE and there is already a selection
            {
                var s = window.getSelection();
                if (s.rangeCount > 0)
                    s.removeAllRanges();
                s.addRange(savedRange);
            }
            else if (document.createRange)//non IE and no selection
            {
                window.getSelection().addRange(savedRange);
            }
            else if (document.selection)//IE
            {
                savedRange.select();
            }
        }
    }

And call Savesel on Focusout event of your Contenteditable 然后在Contenteditable的Focusout事件上致电Savesel

 $("#contenteditableId").focusout(function () {
            saveSel();
        });

At last Call restoreSel 最后致电restoreSel

 function FormatText(command, option) {
        restoreSel();
        document.execCommand(command, false, option);
    }

I use document.queryCommandState("bold"); 我使用document.queryCommandState("bold"); for bold. 大胆。 It works for me. 这个对我有用。

I had a similar problem. 我有一个类似的问题。 In my case "span" tag makes an issue it has font-weight 700, After deep analysis, I figure out if span tag font weight is more than 500 (600, 700, 800, bold, bolder etc) create this issue, even if it's not inside "contenteditable" still it creates a problem. 以我为例,“ span”标签的字体权重为700,经过深入分析,我发现span标签的字体权重是否大于500(600、700、800,粗体,粗体等)会造成此问题,甚至如果它不在“ contenteditable”中,则仍然会产生问题。 Just remove style font-weight 700 and add <b> instead resolve my issue. 只需删除样式字体粗细700并添加<b>解决我的问题。 Hope it helps someone. 希望它可以帮助某人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM