contentEditable div 中的粗体选定文本,使用纯 JavaScript,不使用 jQuery 等库

Posted

技术标签:

【中文标题】contentEditable div 中的粗体选定文本,使用纯 JavaScript,不使用 jQuery 等库【英文标题】:Bold Selected Text in contentEditable div, using pure JavaScript without libraries such as jQuery 【发布时间】:2015-07-09 04:35:53 【问题描述】:

我们有一个可编辑的 div,我们希望在单击按钮时更改用户选择的文本样式;就像这个编辑器的粗体或斜体按钮一样。

但是当我们点击按钮时,我们选择的文本会被取消选择。

那么,即使可编辑的焦点关闭并更改样式,如何保持我们选定的文本突出显示。

我的代码:

可编辑的分区:

var textbox= document.createElement("div");
textbox.setAttribute("contenteditable", "true");

按钮:

var bold = document.createElement("div");
bold.innerhtml = "B";

按钮点击:

bold.addEventListener("click", function()
        getSelectedText();
,false);

    function getSelectedText()
    
       var html = "";
       if (window.getSelection) 
         html = window.getSelection().toString();
        

       else if (document.selection && document.selection.type != "Control") 
            html = document.selection.createRange().text;
       
       alert(html);
    

【问题讨论】:

可能需要一个监听器来存储创建的模糊范围。至少我是这样处理的。 这里似乎正在发生一些事情。包含的所有代码都会提醒突出显示的文本,并且按预期工作。 你不能用一个实际的按钮来代替 div 吗?选择将保留。 @Samurai 一个实际的按钮可以完成我的工作,但我只能使用 div 抱歉。 【参考方案1】:

您可以通过收听contentEditableonmouseup 来获得选择并将其存储在变量中。单击 div 后,将选择恢复为原来的样子:

Javascript:

var range = "";

function getSelected() 
    var selection = window.getSelection()
    range = selection.getRangeAt(0);


function reselect() 
    var selection = window.getSelection();  
    selection.removeAllRanges();
    selection.addRange(range);

jsfiddle DEMO 为按钮使用了一个按钮和一个 div,因此您可以看到区别。

【讨论】:

你的 jsfiddle 粗体按钮什么都不做 在 jsfiddle 中提供的选定文本在单击按钮(或 div)时被保留。问题是单击按钮时取消选择的选定文本(并且文本失去焦点)。 感谢您的澄清,在这种情况下它确实有效,这是另一种方法:***.com/a/11787147/175071 顺便说一句,这个答案是不完整的。你应该修好按钮。【参考方案2】:

要么使用mousedown 事件而不是click 事件,要么将<div> 按钮设置为不可选择。

详情请见this answer。

【讨论】:

以上是关于contentEditable div 中的粗体选定文本,使用纯 JavaScript,不使用 jQuery 等库的主要内容,如果未能解决你的问题,请参考以下文章

textView 中的粗体/斜体样式文本输入

MFC 中的粗体标签

目标 C:MFMailComposeViewController 中的粗体消息正文

IPhone UILabel中的粗体字体

IPhone UILabel中的粗体字体

Google表格中的粗体特定文本[重复]