代码之家  ›  专栏  ›  技术社区  ›  Alex C

editor.getSelection()。getRanges()[0]在IE11中不返回相同的结果

  •  1
  • Alex C  · 技术社区  · 10 年前

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

    所有工作都很好 chrome , firefox , opera safari 但不在 IE 。问题来自

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

    这给了我一个 span 镀铬,这是我想要的 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和同样的问题。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Reinmar    10 年前

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

        2
  •  0
  •   Alex C    10 年前

    是的,我很害怕,所以,谢谢,做了一个小修复,不太性感,但它起作用了

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