Как в textarea вставить табуляцию перед каждой выделенной строкой?

дан textarea с некоторым текстом. Выделяем некоторое количество строк. необходимо после нажатия на tab поставить перед каждой из выделенных строк табуляцию. У меня хватило ума только на то, что ниже) Сейчас попробую вариант с приведением выделенных строк к массиву, добавлением табуляции и последующей имплемнтацию обратно в textarea

let textarea = document.querySelector("textarea");
let start;
let end;
textarea.addEventListener("mouseup", function () {
  start = this.selectionStart;
  end = this.selectionEnd;

});
textarea.addEventListener("keydown", function (event) {
  if (event.key == "Tab") {
    event.preventDefault();
    this.value = this.value.substring(0, start)+"\t"+this.value.substring(start, end)+ this.value.substring(end, this.value.length)
  }
});
    <textarea name="a" id="textarea"></textarea>


Ответы (1 шт):

Автор решения: ksa

У меня хватило ума только на то, что ниже)

"Расширю" твой вариант... :)

const textarea = document.querySelector("textarea");
textarea.addEventListener("keydown", function (event) {
  if (event.key == "Tab") {
    event.preventDefault();
    const start = this.selectionStart;
    const end = this.selectionEnd;
    const val = this.value
    let v = val.substring(start, end)
    v = event.shiftKey 
      ? v.replace(/(?<=^|\n)\t/g, '') 
      : '\t' + v.replace(/\n(?!$)/g, '$&\t')
    this.value = val.substring(0, start)+ v + val.substring(end, val.length)
  }
});
<textarea name="a" id="textarea"></textarea>

→ Ссылка