Как в 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>