我想在页面上有一个内容可编辑的 ul。但是,在 Internet Explorer 10 中,如果您单击进入,使用右键单击菜单或 CTRL+A 选择全部,然后删除,ul 元素将从页面中删除。
防止这种情况的最佳方法是什么,或者至少检测它何时发生并插入替换 ul?
我建议拦截删除和退格键并手动执行删除。步骤是:
- 获取选定的范围
- 调整范围的末端以使其位于可编辑范围内
<ul>
元素(如果它们在外面)
- Call
deleteContents()
在范围内。
请注意,以下内容不适用于 IE Rangy库,它也可以用来简化deleteSelectedContent()
轻微地。
Demo: http://jsfiddle.net/timdown/STcXa/3/ http://jsfiddle.net/timdown/STcXa/3/
Code:
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)