可编辑的错误' pre'在IE 10上标记

时间:2015-08-17 14:12:53

标签: internet-explorer internet-explorer-10 contenteditable pre

我发现了IE 10的一些奇怪的行为。我猜它的错误,但我在这里或谷歌都没有找到任何描述,所以我对它不太确定。< / p>

这笔交易是可编辑的问题&#34; pre&#34;标签。实际上,有两个问题。

它可以在IE10上的JSFiddler中重现:

INFO  org.apache.solr.core.SolrCore - CORE DESCRIPTOR: {name=collection1, config=solrconfig.xml, transient=false, schema=schema.xml, loadOnStartup=true, instanceDir=collection1, collection=collection1, absoluteInstDir=F:\prosjekt3\nmdc\source\central-api\src\test\resources\solr-5.2.1\server\solr\nmdc\collection1\, dataDir=C:\Windows\Temp\no.nmdc.solr.request.SolrEmbeddedSearchTest_4D0704B125401CE0-001\init-core-data-001, shard=shard1}

以下是我在JSFiddler上录制的demo的链接(由于信誉不佳,我无法附加图片,所以我只给你一个链接。)

一些描述:

  1. 我无法在该行的末尾添加文字。当我将插入符号设置到最后并开始输入内容时,文本在新行上显示为。我无法在其他浏览器上重现这一点(IE 8-9,11可以正常工作)。我不知道问题是什么。但是,当我修改同一行上的文本,但在行的中间,之后 - 一切都很完美(如预期的那样),我可以添加文本结束。
  2. 可以编辑不可编辑的子块。正如您在演示中看到的那样,我可以轻松地将光标移动到不可编辑块的第一个和第二个字母之间(并且仅在它们之间,我无法向前移动)并更改文本。是的,它在其他浏览器中工作正常(我无法编辑块内的任何内容)。
  3. 任何人都可以确认这是一个错误,或者我只是做错了吗?

    如果有人知道任何变通办法,请分享。

    谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助!
我想我明白了。

是的,它是IE10,contentEditable标记和行结尾\n的错误。如果你拥有所有这些,那么当你走到行尾时,IE10将光标放在 \n符号之后,当你尝试输入一些文本时 - 它发生在乞讨新行。
此外,当你看到光标在行的末尾或它在下一行的乞讨时,IE10看不到任何差异(你可以看到它是可视的,但在内部 - 没有区别)。

经过几天的调查,我没有办法克服这种行为(或者说这些状态有所不同) 因此,我只需将所有\n替换为<br />

if (IE.isTheBrowser && IE.actualVersion === 10) {
    var newLineFix = new RegExp("\n", "g");
    s = s.replace(newLineFix, "<br />");
}

就是这样!错误不再发生。

关于编辑无用儿童的第二个问题。我只写了以下修复(当用户输入符号时发生):

function getOldRange() {
    return document.selection.createRange();
}

function onKeyPress() {
    if (getOldRange()) {
        var oldRange = getOldRange();

        if (IE.isTheBrowser && IE.actualVersion === 10) {
            var parent = oldRange.parentElement();

            if (parent.getAttribute("contentEditable") === "false") {
                var newRange = document.createRange();
                newRange.setStartAfter(parent);
                newRange.setEndAfter(parent);

                var selection = getNewSelection();
                selection.removeAllRanges();
                selection.addRange(newRange);
            }
        }

        ...
    }
}

我知道这是一个混乱的代码,但它对我来说非常完美!

希望它对某人有帮助。