Символ табуляції (t) в textarea при натисканні TAB на клавіатурі
Коротка нотатка з JS-кодом на основі jQuery, який вставляє символ табуляції t
при натисканні на кнопку TAB у полі textarea.
Горизонтальна табуляція (HT, TAB) — символ таблиці ASCII, що управляє, з кодом 09, використовується для вирівнювання тексту в рядках. Зустрівши цей символ, термінал переміщає каретку (або курсор) праворуч на найближчу позицію табуляції. Зазвичай ці позиції розташовуються кожні 8 знайомест, в колонках 1, 9, 17, 25… Вводиться з допомогою кнопки Tab ⇆
, у багатьох мовах програмування позначається як t
.
Я описую функції на цьому блозі, і як час і вистачає знань, відповідаю на ваші запитання в коментарях. І в тому, і в іншому випадку, часто доводиться писати коди і дуже не вистачало можливості вставляти символ прямо з клавіатури, звичною кнопкою TAB. Сьогодні вирішив написати невеликий код, який перехоплює подію натискання клавіші Tab і вставляє символ в поле textarea, в місце, де знаходиться курсор.
/** * Символ t (tab ⇆ табуляція) в textarea при натисканні tab на клавіатурі. * * Додає початкові відсутпи для виділеного тексту при натисканні на клавішу `Tab`. * Або прибирає початковий відступ (4 пробіли або TAB) при натисканні на `Shift + Tab`. * * @Author Kama (wp-kama.ru) * @version 4.3 */ document.addEventListener( 'keydown', function( event ){ if( 'TEXTAREA' !== event.target.tagName ) return // not tab if( event.code !== 'Tab' ) return event.preventDefault() // Opera, FireFox, Chrome let textarea = event.target let selStart = textarea.selectionStart let selEnd = textarea.selectionEnd let before = textarea.value.substring( 0, selStart ) let slection = textarea.value.substring( selStart, selEnd ) let after = textarea.value.substr(selEnd) let slection_new = '' // remove TAB indent if( event.shiftKey ){ // fix selection let selectBefore = before.substr( before.lastIndexOf( 'n' ) + 1 ) let isfix = /^s/.test( selectBefore ) if(isfix) { let fixed_selStart = selStart - selectBefore.length before = textarea.value.substring( 0, fixed_selStart ) slection = textarea.value.substring( fixed_selStart, selEnd ) } let once = false slection_new = slection.replace( /^(t|[ ]{2,4})/gm, ( mm )=>{ if( isfix && ! once ){ once = true // do it once - для першої лінії тільки selStart -= mm.length } selEnd -= mm.length return '' }) } // add TAB indent else { selStart++ // has selection if( slection.trim() ){ slection_new = slection.replace( /^/gm, ()=>{ selEnd++ return 't' }) } else { slection_new = 't' selEnd++ } } textarea.value = before + slection_new + after // Cursor textarea.setSelectionRange( selStart, selEnd ) });
Цей код буде спрацьовувати для всіх textarea на сторінці, якщо потрібно, щоб було порушено певне поле, то змініть перевірку:
if( 'TEXTAREA' !== event.target.tagName )
Вказуємо довжину (ширину) табуляції у CSS
Коли відступи використовуються в коді, 8 прогалин досить багато – 4 пробілів цілком достатньо, до того ж це неписаний стандарт, який використовується в текстових редакторах. Та й мова розмітки markdown використовує 4 пробіли, коли йдеться про код.
Властивість CSS tab-index
дозволяє змінити ширину відступу, заданого за допомогою символу табуляції (клавіша Tab). У значенні якості необхідно вказувати кількість знаків. Наприклад, щоб змінити ширину табуляції до 4 символів, потрібно вказати властивість так:
pre { tab-size: 4; -o-tab-size: 4; -moz-tab-size: 4; }
Підтримка цієї якості браузерами 96% (з префіксами). Не підтримує лише IE. Докладніше про підтримку дивіться тут .