更改contentEditable div的字体大小

3
我有一个能编辑内容的
元素:
<div id="editor" contentEditable="true"> Enter your text here.. </div>

还有一个 下拉按钮

<div class="btn-group">
    <button class="btn dropdown-toggle" data-toggle="dropdown" title="Taille de police"><i class="fa fa-text-height"></i>&nbsp;<b class="caret"></b></button>
    <ul class="dropdown-menu" id="tailles"></ul>
</div>

为了填充下拉列表中的项目,我使用以下脚本:

//Liste des tailles utilisé
var tailles = [
    'Petite (8px)',
    'Petite (10px)',
    'Petite (12px)',
    'Normale (14px)',
    'Grande (18px)',
    'Grande (24px)',
    'Grande (36px)'
];

    //Récuperer le drop down du Taille de police
    var taillesDropDown = document.getElementById('tailles');

    //Population du drop down Taille du police
    tailles.forEach(function(taille){
        var li       = document.createElement('li');
        var a        = document.createElement('a');
        var fontSize = parseInt(/\d+/.exec(taille));
        a.style = "font-size:" + fontSize + "px" + ";height:"+(fontSize+4) + "px" + ";padding:6px;";
        a.appendChild(document.createTextNode(taille));
        a.id = fontSize + "px";
        li.appendChild(a);
        taillesDropDown.appendChild(li);
    });

为了给每个项目添加事件,我使用了以下脚本:

//Changer la taille du police
//Fonction pour proteger le contentEditable conte la perte du focus
$(function(){
    //Selectionner tous les elements du dropdown du taille du police
    $('#tailles a')
        //mettre un terme à l'événement de mousedown
       .on('mousedown', function (e) {
            e.preventDefault()
            return setTimeout(300)
        })
       //gérer l'événement clic seulement une fonction que nous pouvons attribuer ce que nous voulons faire quand nous cliquons.
       .on('click', function(e){
            document.execCommand('fontSize', false, e.currentTarget.id);
            console.log(e.currentTarget.id);
       })
})

问题在于当我选择下拉菜单中的某个项目以更改editableContent div中所选文本的字体大小时,字体大小总是更改为36px

我尝试在FireBug中检查我的下拉菜单项,以下是我得到的结果:

<li><a id="8px" style="font-size: 8px; height: 12px; padding: 6px;">Petite (8px)</a></li>
<li><a id="10px" style="font-size: 10px; height: 14px; padding: 6px;">Petite (10px)</a></li>
<li><a id="12px" style="font-size: 12px; height: 16px; padding: 6px;">Petite (12px)</a></li>
<li><a id="14px" style="font-size: 14px; height: 18px; padding: 6px;">Normale (14px)</a></li>
<li><a id="18px" style="font-size: 18px; height: 22px; padding: 6px;">Grande (18px)</a></li>
<li><a id="24px" style="font-size: 24px; height: 28px; padding: 6px;">Grande (24px)</a></li>
<li><a id="36px" style="font-size: 36px; height: 40px; padding: 6px;">Grande (36px)</a></li>

因此,在填充“下拉菜单”的脚本中没有错误,正如您所看到的每个项目的“id”都具有应在“execCommand”的第三个参数中给出的值。
我还检查了我更改字体大小的文本:
<font size="7">text</font>

我该怎么解决这个问题?

当我改变字体大小时,我注意到contentEditable使用HTML标签来实现,同样地对于颜色和字体名称也是如此。有没有什么方法可以强制contentEditable使用css来实现呢?


ID不能以数字开头,这可能是导致您问题的原因。http://css-tricks.com/ids-cannot-start-with-a-number/ - lefoy
ID不能以数字开头,这可能是导致您问题的原因。http://css-tricks.com/ids-cannot-start-with-a-number/ - lefoy
不错的发现,但在HTML5中,ID可能以数字开头(http://dev.w3.org/html5/markup/global-attributes.html#common.attrs.id) - Nico O
不知道那件事,谢谢你告诉我。 - lefoy
1个回答

6
document.execCommand("fontSize"... 命令只接受“HTML字体大小”(1-7)。参见API

fontSize - 更改选择或插入点的字体大小。这需要传递HTML字体大小(1-7)作为值参数

您试图使用较大的值(12...36)作为参数执行该命令,因此该命令会近似到最接近你所期望的大小。因为所有参数都大于7,所以近似值总是7。
如果确切的像素高度对您不重要,则最好将代码更改为使用不精确的html字体大小。
还请参考:document.execCommand() FontSize in pixels?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接