3

我想在页面上有一个 contenteditable ul。但是,在 Internet Explorer 10 中,如果您单击它,请使用右键单击菜单或 CTRL+A 全选,然后删除,ul 元素会从页面中删除。

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

4

1 回答 1

3

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

  • 获取所选范围
  • 调整范围的末端以位于可编辑<ul>元素内(如果它们在外部)
  • 呼叫deleteContents()范围。

请注意,以下内容不适用于 IE <= 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);
于 2013-08-13T23:32:04.363 回答