editor.getSelection().getRanges()[0] 在 IE11 中不会 return 相同的结果

editor.getSelection().getRanges()[0] don't return the same result in IE11

我已经研究这个问题几个小时了,但找不到解决方法。我正在使用 ckeditor 4.3(也尝试 4.5)和自定义颜色选择器来更改字体颜色。

chromefirefoxoperasafari 中都可以正常工作,但在 IE 中却不行。问题来自

editor.getSelection().getRanges()[0].startContainer

在chrome中给了我一个span,这是我想要的,在IE中给了我p,这是一个高一级。

举个例子:

_me.editor.focus();
var range = _me.editor.getSelection().getRanges()[0];
AddLinkColor(range.startContainer, value.Value);

var AddLinkColor = function (element, color)
{
    var selectedChild = null;
    if (element.getChildren) { selectedChild = element.getChildren(); }
    if (selectedChild)
    {
        if (selectedChild.count)
        {
            for (var i = 0; i < selectedChild.count() ; i++)
            {
                var childElement = selectedChild.getItem(i);
                if (childElement.getStyle && childElement.getStyle('color')      != '' && childElement.getStyle('color') != color) childElement.setStyle('color',` color);
                if (childElement.getChildCount && childElement.getChildCount() > 0) AddLinkColor(childElement, color);
                if (element.$.tagName == 'A') element.setStyle('color', color);
            }
        }
    }
};

还有其他人遇到同样的问题吗?

我已经尝试了 startContainer 的所有变体,它给出了 dom 元素,比如 commonAncestor 等仍然是同样的问题。

选择在不同浏览器中的行为不同,因为没有规范,而且平台的行为通常也不同。只要结果反映了选择的真实位置,一切都很好。这不足为奇,也无需担心。唯一的问题是您需要处理所有这些不同的选择,这使得创建编辑器变得非常困难。因此,CKEditor API 包含许多工具来简化这项工作。

是的,我很害怕,谢谢,做了一个不太性感但有效的小修复

 if(element.getName() != "span") {  selectedChild = element.getChildren().getItem(0).getChildren(); }    
 else {   selectedChild = element.getChildren();  }