如何防止IE10中意外删除可信的ul?

时间:2013-08-13 19:26:05

标签: javascript jquery html html5 contenteditable

我希望在页面上有一个可疑的ul。但是,在Internet Explorer 10中,如果单击它,使用右键单击菜单或CTRL + A选择all,然后删除,ul元素将从页面中删除。

防止这种情况的最佳方法是什么,或者至少检测它何时发生并插入替换ul?

1 个答案:

答案 0 :(得分:3)

我建议拦截删除和退格键并手动执行删除操作。步骤是:

  • 获取所选范围
  • 如果范围
  • ,则将范围的末尾调整为可编辑的<ul>元素
  • 在范围内致电deleteContents()

请注意,以下内容不适用于IE&lt; = 8.如果您需要支持这些浏览器,可以使用我的Rangy库,这也可以用来简化deleteSelectedContent()

演示:http://jsfiddle.net/timdown/STcXa/3/

代码:

var editor = document.getElementById("editor");

function deleteSelectedContent() {
    if (window.getSelection) {
        var sel = window.getSelection();
        if (sel.rangeCount > 0) {
            var range = sel.getRangeAt(0);
            var editorRange = range.cloneRange();
            editorRange.selectNodeContents(editor);

            // Adjust selection range boundaries
            if (range.compareBoundaryPoints(Range.START_TO_START, editorRange) == -1) {
                range.setStart(editorRange.startContainer, editorRange.startOffset);
            }
            if (range.compareBoundaryPoints(Range.END_TO_END, editorRange) == 1) {
                range.setEnd(editorRange.endContainer, editorRange.endOffset);
            }

            range.deleteContents();
        }
    }
}

editor.addEventListener("keydown", function(evt) {
    if (window.getSelection &&
            !window.getSelection().isCollapsed &&
            (evt.keyCode == 8 || evt.keyCode == 46)) {
        evt.preventDefault();
        deleteSelectedContent();
    }
}, false);