<textarea>
にタブ入力できるようにしたい時、ずっとこれ↓でやってました。
が、別件で調べてて以下の記事を見つけました。
JavaScript でテキストエリア内の文字列を書き換えた際に undo や redo が効くようにする - Qiita
どんくさすぎてUndo/Redoができないことにすら気づいてませんでした。実際やったらできませんでした。
document.execCommand()
で現在のカーソル位置にタブを挿入すれば、Undo/Redoが効くみたいです。
こんなAPIあったの初めて知った。IEでも使えるらしい。
動作サンプル
上記の2つのコードを実装したテキストエリアです。