0

スパンがあり、ダブルクリックすると編集可能になります。ただし、ダブルクリックにより一部のテキストが選択されているため、次のコードを使用してその選択を削除します。

function removeSelectedText(element) {
if (window.getSelection || document.getSelection) {
    oSelection = (window.getSelection ? window:document).getSelection();
    oSelection.removeAllRanges();
} else {
    document.selection.empty();
}
}

この操作の後、現在編集可能な非選択スパンはフォーカスを失います。スパン内で最後にクリックされた場所にキャレットを移動したいだけです。以下のコードを試してみましたが、うまくいきませんでした (「要素」はスパンそのものです):

...
var selection = (window.getSelection ? window:document).getSelection();
var position = selection.getRangeAt(0).focusOffset;
element.focus();

var range = document.createRange();
range.setStart(element, position);
range.setEnd(element, position);
range.collapse(true);
selection.removeAllRanges();
selection.addRange(range);

見つけたものは何でも試してみましたが、うまくいきませんでした。イライラでもう集中できません。あなたが私を助けてくれたら、それは素晴らしいことです...

更新:の代わりに と を使用する必要がrange.setStart()ありrange.setEnd()ます。element.firstChildelement

4

1 に答える 1