ページに contenteditable ul が必要です。ただし、Internet Explorer 10 でクリックし、右クリック メニューまたは CTRL+A ですべて選択してから削除すると、ul 要素がページから削除されます。
これを防ぐ、または少なくともそれがいつ発生したかを検出して交換用の ul を挿入する最善の方法は何ですか?
ページに contenteditable ul が必要です。ただし、Internet Explorer 10 でクリックし、右クリック メニューまたは CTRL+A ですべて選択してから削除すると、ul 要素がページから削除されます。
これを防ぐ、または少なくともそれがいつ発生したかを検出して交換用の ul を挿入する最善の方法は何ですか?
削除キーとバックスペース キーをインターセプトし、手動で削除することをお勧めします。手順は次のとおりです。
<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);