您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“textarea中的換行和空格如何處理”,內容詳細,步驟清晰,細節處理妥當,希望這篇“textarea中的換行和空格如何處理”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在textarea 里面,空格和換行會被保存為/s
和/n
,如果我們前臺輸入和前臺顯示的文字都是在 textarea 里面,其實并不需要做任何處理,你在 textarea 里面編寫的樣式會按照你之前編輯時候的樣式,正確的顯示出來。
那么如果你需要 textarea 編輯提交的文字,從后臺返回之后,不是顯示在 textarea 里面,那么就需要考慮處理空格和換行啦。
其實之前在接觸的時候,完全沒有考慮過這些問題,也是因為最近做的項目里面有一個這樣子的需求,要求用戶在 textarea 輸入文字,提交之后以文章的格式顯示在頁面上。不管用戶輸入的時候打了多少空格,默認每段文字都只縮進2個字符,且要考慮用戶上傳的詩歌形式,也就是每個段落之間可能有兩行空白。總而言之一句話總結呢,就是—去掉用戶的輸入的空格,保留段落之間的換行。
那么我最終的做法就是,在保存的時候還是不做任何處理,直接保存到后臺。顯示的時候,從后臺獲取到文本之后,去掉文中的所有空格,然后顯示在<pre>
標簽里面。
這里我用一個小例子來示意一下textarea在各種情況下的保存和顯示。首先創建一個簡單的 html 頁面,為了方便獲取數據和顯示,我引入 vue 來處理數據,給提交按鈕綁定一個點擊事件,點擊確定之后,顯示在下面。基本的頁面結構和 js 如下:
<div class="app">
<p>請輸入內容:</p>
<textarea name="t1" rows="8" cols="80" v-model="text1"></textarea>
<button>提交</button>
<p>顯示的內容:</p>
<textarea name="t2" id="" cols="80" rows="8" v-model="text2"></textarea>
</div>
// js部分
const vm = new Vue({
el:'#app',
data:{
text1:'',
text2:''
},
methods:{
submitText(){
this.text2 = this.text1;
}
}
})
不處理空格和換行 顯示在 textarea 里面
這一步就很簡單了,直接點擊提交,可以看到效果,如下圖。在未做任何處理的情況下,保留了所有的空格和換行,適合保存再編輯。
不處理空格和換行 顯示在 div 里面
把剛剛第二個 textarea 替換成 div ,效果如下圖。可以看到空格和換行符都沒有被處理出來,直接被忽略掉了。
<div id="app">
<p>請輸入內容:</p>
<textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea>
<button @click="submitText">提交</button>
<p>顯示的內容:</p>
<p>{{text2}}</p>
</div>
不處理空格和換行 顯示在 pre 標簽里面
將 div 替換成 pre 標簽,將提交的文本顯示在 pre 標簽里面。pre 元素可定義預格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符,他比較常見的應用就是用來顯示代碼,在技術網站和博客的頁面里面,pre 標簽都是用來包裹代碼塊的。
可以從下圖的效果看出,pre 標簽也可以完全實現保留用戶所輸入的空格和換行,看上去似乎能夠達到我的基本需求了。那么接下來的問題就是,如何去掉空格,并且實現自動縮進2個字符。
<div id="app">
<p>請輸入內容:</p>
<textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea>
<button @click="submitText">提交</button>
<p>顯示的內容:</p>
<pre>{{text2}}</pre>
</div>
那么我試試直接給 pre 標簽設置 css 屬性text-index:2em;
?這樣能夠實現需求嗎?答案顯然是不行,因為這個屬性規定的是塊級元素首行文本的縮進,而這里從始至終都只有一個塊級元素 pre ,顯然是不能實現。而且我們還要考慮到用戶自己輸入的空格。
替換空格保留換行
既然直接顯示行不通,看來還是必須要處理文本,那我們就處理一下。首先嘗試,去掉所有的空格,首先想到的就是trim()
方法。思路就是,以換行符為分割,獲取到每一段文本,然后用trim()
方法去掉文本前后的空格,用
標簽把每段文字包裹起來,再把每一段用<br>
換行標簽拼接起來。同時,不用pre
標簽來顯示文本了,直接將處理過后的的 html 片段插入到 div 標簽里面,這里用到的是 vue 的 v-html 屬性。
<div id="app">
<p>請輸入內容:</p>
<textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea>
<button @click="submitText">提交</button>
<p>顯示的內容:</p>
<div v-html="text2" ></div>
</div>
// js部分
submitText(){
let arr = [];
this.text1.split('
').forEach(item=>arr.push(`<p>${item.trim()}</p>`));
this.text2 = arr.join('<br>');
}
讀到這里,這篇“textarea中的換行和空格如何處理”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。