編集可能な DIV のキャレット位置を復元するために、次の Javascript コードを使用します。
var savedRange,isInFocus;
function saveSelection() {
if(window.getSelection) { //non IE Browsers
savedRange = window.getSelection().getRangeAt(0);
} else if(document.selection) { //IE
savedRange = document.selection.createRange();
}
}
function restoreSelection() {
isInFocus = true;
document.getElementById('myInstance1').focus();
if(savedRange != null) {
if (window.getSelection) { //non IE and there is already a selection
var s = window.getSelection();
if (s.rangeCount > 0)
s.removeAllRanges();
s.addRange(savedRange);
} else if (document.createRange) { //non IE and no selection
window.getSelection().addRange(savedRange);
} else if (document.selection) { //IE
savedRange.select();
}
}
}
このコードは、テキストエリアから myInstance1 contenteditable DIV にテキストを追加するために使用されます。IE では、ページの上部にテキストを追加します。
Firefox と Chrome で問題なく動作します。
IEの部分が機能しない理由を知っている人はいますか?
解決策を見つけました:動作するdocument.getElementById('myInstance1').focus();
前savedRange = document.selection.createRange();
に追加することにより:-D
function saveSelection() {
if(window.getSelection) { //non IE Browsers
savedRange = window.getSelection().getRangeAt(0);
} else if(document.selection) { //IE
document.getElementById('myInstance1').focus();
savedRange = document.selection.createRange();
}
}