次のコードは、divに割り当てられたイベントをリッスンします。 h
を押すと、左にある次の文字が選択されます。 l
を押すと、右の次の文字が選択されます。Range.setStart/setEndで選択した文字を削除するには?
// HTML
<div class="editable" contenteditable="true">
<p>This is a test</p>
</div>
// JS
e.preventDefault()
const range = document.createRange()
const content = e.target.querySelector('p').firstChild
if (e.keyCode === 72) { // h
range.setStart(content, this.start -= 1)
range.setEnd(content, this.end -= 1)
}
if (e.keyCode === 76) { // l
range.setStart(content, this.start += 1)
range.setEnd(content, this.end += 1)
}
if (e.keyCode === 88) { // x
range.selectNode(content)
range.deleteContents()
}
window.getSelection().removeAllRanges()
window.getSelection().addRange(range)
x
を押すと、選択した文字が削除されます。私が達成できる最高のものはrange.selectNode(content)
でしたが、これはすべての文字を削除します。
選択した文字のみを削除するにはどうすればよいですか?
EDIT: CodePen:http://codepen.io/alexcheninfo/pen/QNZeQy(テキストをクリックして、あなたがキーを押すと選択の動きを見ることができます。)
あなたは[MCVE]を作成できますか?それがなければ、あなたのコードがどこに間違っているのかを知ることは難しいです。 – DavidG
@DavidG作成したばかりです。私の** EDIT **を見てください。 – alexchenco