詳解Vue如何將多個空格被合并顯示成一個空格
現(xiàn)象
最近在Vue2項目開發(fā)中遇到個奇怪的現(xiàn)象,用戶往數(shù)據(jù)庫存了中間有四個空格的數(shù)據(jù),數(shù)據(jù)庫存儲正常,接口返回的數(shù)據(jù)也是帶四個空格沒問題,但頁面展示只有一個空格。
原因
在HTML/Vue中,多個連續(xù)的空格會合并為一個空格。
解決方案
1.插值表達式 + 正則
<template> <span>{{ space1 }}</span> <span>{{ space2} }</span> </template> <script> export default { data() { //正確寫法 space1: '這是 空格'.replace(/\s/g, '\xa0'),//頁面顯示效果:這是 空格 //錯誤寫法 space2: '這是 空格'.replace(/\s/g, ' '),//頁面顯示效果:這是 空格 } } </script>
在Vue2中,如果使用插值表達,則需使用\xa0
來表示空格,如果直接使用
來表示空格,它不會顯示為空格,而是會被當成字符實體解析。
2.v-html指令 + 正則
<template> <span v-html="space1">{{ space1 }}</span> <span v-html="space2">{{ space2} }</span> </template> <script> export default { data() { //正確寫法1 space1: '這是 空格'.replace(/\s/g, '\xa0'),//頁面顯示效果:這是 空格 //正確寫法2 space2: '這是 空格'.replace(/\s/g, ' '),//頁面顯示效果:這是 空格 } } </script>
在Vue2中,如果使用v-html
指令方式,則用\xa0
或
來表示空格都可以正常顯示。
3.v-html指令/插值表達式 + CSS
如果不對空格進行轉(zhuǎn)義,在v-html
指令/插值表達式模式下直接給元素添加如下樣式也能實現(xiàn)想要的效果。
<template> <span style="white-space:pre;" v-html="'這是 空格'"></span> </template>
其中,white-space:pre;
是保留所有空白或換行符(回車鍵),可以實現(xiàn)原樣輸出。
番外
在Vue2中,如果在模板標簽中直接使用 作為空格,則在 compile 的過程中會被轉(zhuǎn)換成一個空格。而直接使用\xa0來表示空格,則會被當成字符實體解析。
<template> <!-- 頁面顯示效果:這是 空格 --> <span>這是 空格'</span> <!-- 頁面顯示效果:這是\xa0\xa0\xa0 空格 --> <span>這是\xa0\xa0\xa0空格'</span> </template>
HTML提供的幾種空格實體
HTML提供的幾種空格實體(space entity),它們擁有不同的寬度。非斷行空格( )是常規(guī)空格的寬度,可運行于所有主流瀏覽器。其他幾種空格(      ‌‍
)在不同瀏覽器中寬度各異。
它叫不換行空格,全稱No-Break Space,它是最常見和我們使用最多的空格,大多數(shù)的人可能只接觸了 ,它是按下space鍵產(chǎn)生的空格。在HTML中,如果你用空格鍵產(chǎn)生此空格,空格是不會累加的(只算1個)。要使用html實體表示才可累加,該空格占據(jù)寬度受字體影響明顯而強烈。
 
它叫半角空格,全稱是En Space,en是字體排印學(xué)的計量單位,為em寬度的一半。根據(jù)定義,它等同于字體度的一半(如16px字體中就是8px)。名義上是小寫字母n的寬度。此空格傳承空格家族一貫的特性:透明的,此空格有個相當穩(wěn)健的特性,就是其占據(jù)的寬度正好是1/2個中文寬度,而且基本上不受字體影響。
 
它叫角空格,全稱是Em Space,em是字體排印學(xué)的計量單位,相當于當前指定的點數(shù)。例如,1 em在16px的字體中就是16px。此空格也傳承空格家族一貫的特性:透明的,此空格也有個相當穩(wěn)健的特性,就是其占據(jù)的寬度正好是1個中文寬度,而且基本上不受字體影響。
 
它叫窄空格,全稱是Thin Space。我們不妨稱之為瘦弱空格,就是該空格長得比較瘦弱,身體單薄,占據(jù)的寬度比較小。它是em之六分之一寬。
‌
它叫零寬不連字,全稱是Zero Width Non Joiner,簡稱ZWNJ,是一個不打印字符,放在電子文本的兩個字符之間,抑制本來會發(fā)生的連字,而是以這兩個字符原本的字形來繪制。Unicode中的零寬不連字字符映射為U+200C。
‍
它叫零寬連字,全稱是Zero Width Joiner,簡稱ZWJ,是一個不打印字符,放在某些需要復(fù)雜排版語言(如阿拉伯語、印地語)的兩個字符之間,使得這兩個本不會發(fā)生連字的字符產(chǎn)生了連字效果。零寬連字符的Unicode碼位是U+200D。
此外,瀏覽器還會把以下字符當作空白進行解析:空格( 
)、制表位(	
)、換行(

)和回車(
)還有( 
)等等。
Js中的空格
1.String.fromCharCode(32)
2.\xa0
:屬于latin(ISO/IEC_8859-1,拉丁字母)中的擴展字符集字符,代表空白符nbsp(non-breaking space)。
3.\u0020
:屬于Unicode字符,用法和\xa0
一樣
4.\x20
:標準鍵盤碼值表-十六進制。
5.%20
:對URI 進行解碼的樣式,需要用到decodeURIComponent。如decodeURIComponent('%20')后會顯示1個空格。
6.\t
: 這種相當于按了tab鍵,一個相當于4個空格。
到此這篇關(guān)于詳解Vue如何將多個空格被合并顯示成一個空格的文章就介紹到這了,更多相關(guān)Vue合并多個空格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項目中運用webpack動態(tài)配置打包多種環(huán)境域名的方法
本人分享一個vue項目里,根據(jù)命令行輸入不同的命令,打包出不同環(huán)境域名的方法。需要的朋友跟隨小編一起看看吧2019-06-06vue中axios防止多次觸發(fā)終止多次請求的示例代碼(防抖)
這篇文章主要介紹了vue中axios防止多次觸發(fā)終止多次請求的實現(xiàn)方法(防抖),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02vue、react等單頁面項目應(yīng)該這樣子部署到服務(wù)器
這篇文章主要介紹了vue、react等單頁面項目應(yīng)該這樣子部署到服務(wù)器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01vue2.0實戰(zhàn)之使用vue-cli搭建項目(2)
這篇文章主要為大家詳細介紹了vue2.0實戰(zhàn)第二篇使用vue-cli搭建項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03vue2如何使用vue-i18n搭建多語言切換環(huán)境
這篇文章主要介紹了vue2-使用vue-i18n搭建多語言切換環(huán)境的相關(guān)知識,在data(){}中獲取的變量存在更新this.$i18n.locale的值時無法自動切換的問題,需要刷新頁面才能切換語言,感興趣的朋友一起看看吧2023-12-12