技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

DiyVM:香港VPS驚爆價36元一月
★站長變現(xiàn)★特色懸浮小圖標(biāo)廣告
5M CN2 GIA云主機 24元起
【轉(zhuǎn)化好產(chǎn)品,官方高價收量】
一一一云主機 26元起一一一
官方高價收量,每日穩(wěn)定結(jié)算

一一云主機 24元 3折起一一
AWS核心代理U充值 免注冊開戶
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免費測試★APK免殺 谷歌過保護(hù)
官方收量CPA/CPS長期穩(wěn)定

海外主機 5M CN2 低至$2/月
恒創(chuàng)科技 一 海外服務(wù)器 ● 高速穩(wěn)定
★解決安裝報毒★谷歌過保護(hù)機制
CN2 GIA/1000Mbps $111/月
超級簽★免殺★加固★滿意付款
全球云主機 3天試用再買

【菠蘿云】香港4G內(nèi)存99元,馬上開通
億人互聯(lián)-津/京BGP托管租用/VPS
蘋果簽名/APP封裝/遠(yuǎn)控免殺
10M CN2海外云VPS 53元/月
一一站長/主播好變現(xiàn)一一有流量就來
站長變現(xiàn) 特色懸浮小圖標(biāo)廣告

實力產(chǎn)品變現(xiàn)
實力產(chǎn)品變現(xiàn)
實力產(chǎn)品變現(xiàn)
實力產(chǎn)品變現(xiàn)
實力產(chǎn)品變現(xiàn)
實力產(chǎn)品變現(xiàn)

贊助商

分類目錄

贊助商

最新文章

字体单位是相对测量单位,是根据其他一些值计算的,可以动态变化。与字体相关的测量单...
stroke-width设置形状的描边粗细,如果在 HTML 中,框架是从外边缘...
本文给大家介绍10款用SVG蒙版制作的图片转场/过渡动画,并分析如何实现它们。
CSS 数据类型<filter-function>代表可以改变输入图...
CSS box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个...
drop-shadow() 是一个CSS 过滤器函数,其将投影效果应用于输入图像...
本文给大家介绍一个SVG实现的网页气泡动画效果。 

搜索

如何給Textarea文本區(qū)域添加行號【演示/源碼下載】

作者:admin    時間:2023-2-21 21:1:54    瀏覽:

我們在網(wǎng)頁上使用的Textarea文本框,多數(shù)是沒有行號的,這是默認(rèn)的樣子。如果你想要把它設(shè)計成一個編輯器的樣子,那么需要給它添加一個行號,這怎么實現(xiàn)呢?本文將給大家介紹實現(xiàn)方法。

demodownload

在本實例中,將介紹如何使用盡可能少的 DOM 節(jié)點以及僅10行JavaScript代碼,為任何 html textarea 自行添加行號。

創(chuàng)建 HTML

我們需要一個textarea,還有行號的容器,以及整個編輯器的包裝器,因此我們可以相應(yīng)地對其進(jìn)行布局,代碼如下:

  1. <div class="editor">
  2.     <div class="line-numbers">
  3.         <span></span>
  4.     </div>
  5.     <textarea></textarea>
  6. </div>

我們要將行號存儲在div中,每行將由一個空的span表示。我們將通過 CSS 添加實際數(shù)字,以便我們可以根據(jù)需要自動對它們進(jìn)行編號。

設(shè)置一個 keyup 事件監(jiān)聽器

以編程方式添加行號,我們需要一個keyup附加到textarea,代碼如下:

  1. const textarea = document.querySelector('textarea')
  2. const lineNumbers = document.querySelector('.line-numbers')
  3.  
  4. textarea.addEventListener('keyup', event => {
  5.   const numberOfLines = event.target.value.split('\n').length
  6.  
  7.   lineNumbers.innerHTML = Array(numberOfLines)
  8.     .fill('<span></span>')
  9.     .join('')
  10. })

首先,我們需要查詢 DOM 以獲取textarea和容器的行號,然后我們向textarea中添加了一個keyup事件偵聽器,以便每次有人輸入時,它都可以相應(yīng)地更新行號。

我們在這里所做的就是根據(jù)換行符 (\n) 拆分內(nèi)容。然后我們根據(jù)新行的數(shù)量創(chuàng)建一個數(shù)組,在其中添加一個空范圍,然后將所有內(nèi)容重新組合成一個字符串,DOM 元素的 HTML lineNumbers 然后被這個字符串替換。

如果我們現(xiàn)在開始輸入textarea,我們可以看到每次我們按下回車鍵來創(chuàng)建一個新行時,span都會在行號中添加一個新的空行。然而,目前沒有數(shù)字出現(xiàn),所以讓我們跳入 CSS 來解決這個問題。 

 添加換行符時添加空跨度
添加換行符時添加空跨度

x

設(shè)置 Textarea 文本區(qū)域的樣式

現(xiàn)在讓我們看一下樣式,因為我們將使用 CSS 自己添加行號。首先,我們希望整個編輯器顯示為 flex,以便它們(行號和textarea)彼此相鄰放置:

  1. .editor {
  2.   display: inline-flex;
  3.   gap: 10px;
  4.   font-family: monospace;
  5.   line-height: 21px;
  6.   background: #282a3a;
  7.   border-radius: 2px;
  8.   padding: 20px 10px;
  9. }
  10.  
  11. textarea {
  12.   line-height: 21px;
  13.   overflow-y: hidden;
  14.   padding: 0;
  15.   border: 0;
  16.   background: #282a3a;
  17.   color: #FFF;
  18.   min-width: 500px;
  19.   outline: none;
  20.   resize: none;
  21. }

我們還希望為行號和textarea本身提供一致的排版,以便文本將緊挨著行號對齊。我們刪除了textarea中的任何填充和邊框,因為這會再次移動文本,使其與行號不對齊。最后,我們要分別刪除調(diào)整大小選項和帶有resizeoverflow-y屬性的滾動條。

 添加必要的樣式以避免錯位
添加必要的樣式以避免錯位

現(xiàn)在讓我們看看如何通過 CSS 實際添加行號。將以下規(guī)則添加到樣式表中:

  1. .line-numbers {
  2.   width: 20px;
  3.   text-align: right;
  4. }
  5.  
  6. .line-numbers span {
  7.   counter-increment: linenumber;
  8. }
  9.  
  10. .line-numbers span::before {
  11.   content: counter(linenumber);
  12.   display: block;
  13.   color: #506882;
  14. }

我們可以結(jié)合使用CSS自帶的counter函數(shù)和counter-increment來添加行號,該counter函數(shù)需要一個我們?yōu)?code>counter-increment定義的任意名稱,這將在::before偽元素中添加內(nèi)容。

確保還定義了 display 為 block 以便將每個跨度換行。

另一件需要注意的事情是將文本右對齊。添加所有內(nèi)容后,當(dāng)我們開始向textarea中添加新行時,我們會得到以下行為:

添加 Tab 鍵支持

總結(jié)一下,我們還要添加選項卡支持。現(xiàn)在,如果您在textarea中點擊 Tab 鍵,它將把焦點帶到下一個可聚焦元素,因為這是瀏覽器中的默認(rèn)行為。為了防止這種情況,我們需要向textarea添加一個keydown事件監(jiān)聽器:

  1. textarea.addEventListener('keydown', event => {
  2.   if (event.key === 'Tab') {
  3.     const start = textarea.selectionStart
  4.     const end = textarea.selectionEnd
  5.  
  6.     textarea.value = textarea.value.substring(0, start) + '\t' + textarea.value.substring(end)
  7.  
  8.     event.preventDefault()
  9.   }
  10. })

首先,我們需要檢查輸入是否來自 Tab 鍵。我們可以使用event.key,然后我們需要抓取選擇,因為我們希望選項卡也能在文本中工作。為此,我們可以使用selectionStartselectionEnd。我們可以使用這些來重建textarea的值,包括一個額外的制表符 (\t)。

不要忘記通過調(diào)用event.preventDefault來阻止瀏覽器行為的默認(rèn)操作,否則,在textarea內(nèi)按 Tab 鍵將聚焦于下一個可聚焦元素。

結(jié)論

總之,向任何textarea添加行號相對簡單,只需幾行代碼即可輕松完成。如果你只需要添加行號而不需要其他任何東西,那么你最好自己實現(xiàn),而不是為此引入整個庫。

標(biāo)簽: textarea  
相關(guān)文章
    x
    廣告: 【限時】云主機 24元/月