最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

結(jié)合Vue控制字符和字節(jié)的顯示個(gè)數(shù)的示例

 更新時(shí)間:2018年05月17日 10:53:27   作者:俱沫  
這篇文章主要介紹了結(jié)合Vue控制字符和字節(jié)的顯示個(gè)數(shù)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

需求

需求:結(jié)合Vue實(shí)現(xiàn)下面的效果

  1. 輸入框中最多輸入16個(gè)字符
  2. 漢字最多顯示5個(gè),超出部分以...顯示
  3. 英文最多顯示10個(gè),超出部分以...顯示

實(shí)現(xiàn)

搭建簡(jiǎn)單頁(yè)面,并設(shè)置簡(jiǎn)單樣式

在正式開(kāi)始寫(xiě)核心代碼之前,要先把代碼結(jié)構(gòu)搭建起來(lái),這樣后面寫(xiě)的時(shí)候就會(huì)看著簡(jiǎn)潔點(diǎn)了。

首先需要一個(gè)輸入框用來(lái)輸入內(nèi)容,其次需要一個(gè)元素,用來(lái)顯示輸入框中的內(nèi)容,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。

其中,輸入內(nèi)容的最大長(zhǎng)度是可以通過(guò)input標(biāo)簽的屬性來(lái)指定的。

<div id="app">
 <input v-model="txt" class="clsinp" maxlength="16" placeholder="請(qǐng)輸入內(nèi)容" type="text">
 <div class="clsmsg">
  <p>內(nèi)容:<span>{{txt}}</span></p>
  <p>輸入的字符個(gè)數(shù):<span>{{computedCharLen}}</span></p>
  <p>輸入的字節(jié)個(gè)數(shù):<span>{{computedByteLen}}</span></p>
 </div>
</div>

頁(yè)面的結(jié)構(gòu)已經(jīng)搭建完成了,那下面就是做一些簡(jiǎn)單的樣式優(yōu)化了。

* { margin: 0; padding: 0; -webkit-box-sizing: border-box; box-sizing: border-box; }
body { background: #efefef; }
.clsinp { width: 100%; height: 40px; outline: none; line-height: 40px; font-size: 16px; padding: 0 10px; margin-top: 20px; color: blue; }
.clsmsg { padding: 10px 10px; }
.clsmsg span { color: blue; }

最后一步應(yīng)該就是引入Vue,然后搭建一些簡(jiǎn)單的數(shù)據(jù)內(nèi)容。

var vm = new Vue({
 el: '#app',
 data() {
  return {
   txt: ''
  }
 },
 // 后期代碼在下面補(bǔ)充
})

ASCII范圍內(nèi)與范圍外

了解ASCII的內(nèi)容,請(qǐng)移步到http://www.asciima.com/。

ASCII中包含256個(gè)字符,因此超過(guò)256之外的字符,全部都是非ASCII字符,一般情況下,漢字就是在這個(gè)范圍中。

因此,編碼不在0-255的字符可以使用正則表達(dá)式/[^\x00-\xff]/g來(lái)進(jìn)行匹配。這個(gè)時(shí)候就提供了一個(gè)思路,如果不是ASCII碼中的字符,那么就默認(rèn)它占了兩個(gè)字節(jié)。

我們修改一下頁(yè)面結(jié)構(gòu),輸出一些測(cè)試信息:

<div id="app">
 <input v-model="txt" class="clsinp" maxlength="16" placeholder="請(qǐng)輸入內(nèi)容" type="text">
 <div class="clsmsg">
  <p>內(nèi)容:<span>{{txt}}</span></p>
  <p>輸入的字符個(gè)數(shù):<span>{{computedCharLen}}</span></p>
  <p>輸入的字節(jié)個(gè)數(shù):<span>{{computedByteLen}}</span></p>
 </div>
</div>

補(bǔ)充需要的計(jì)算屬性:

computed: {
 // 獲取字符的個(gè)數(shù)
 computedCharLen() {
  return this.txt.length
 },
 // 獲取字節(jié)的個(gè)數(shù)
 computedByteLen() {
  return this.txt.replace(/[^\x00-\xff]/g, '01').length
 }
}

這個(gè)時(shí)候,我們輸入內(nèi)容,出現(xiàn)下面的效果:

這個(gè)時(shí)候會(huì)發(fā)現(xiàn),已經(jīng)實(shí)現(xiàn),ASCII碼范圍內(nèi)的占1位,超出范圍的占2位。

控制顯示的內(nèi)容

內(nèi)容顯示使用計(jì)算屬性來(lái)實(shí)現(xiàn):

<p>內(nèi)容:<span>{{computedTxt}}</span></p>
// 控制顯示的內(nèi)容
computedTxt() {
 return this.methodGetByteLen(this.txt, 10)
}

下面補(bǔ)充一下methodGetByteLen方法:

/**
 * str 需要控制的字符串
 * len 字節(jié)的長(zhǎng)度,如5個(gè)漢字,10個(gè)英文,輸入?yún)?shù)就是10
 */
methodGetByteLen(str, len) {
 // 如果字節(jié)的長(zhǎng)度小于控制的長(zhǎng)度,那么直接返回
 if (this.computedByteLen <= len) {
  return str
 }
 for (let i = Math.floor(len / 2); i < str.length; i++) {
  if (str.substr(0, i).replace(/[^\x00-\xff]/g, '01').length >= len) {
   // Math.floor(i / 2) * 這里是控制特殊情況的顯示
   // 如 '一二aaa一二三四',顯示的結(jié)果就是 '一二aaa一...'
   return str.substr(0, Math.floor(i / 2) * 2) + '...'
  }
 }
}

最終的顯示情況沒(méi)有超過(guò)最大指定長(zhǎng)度的情況

超過(guò)最大指定長(zhǎng)度(漢字輸入)

超過(guò)最大指定長(zhǎng)度(數(shù)字輸入)

超過(guò)最大指定長(zhǎng)度(漢字和字母的組合)

完整代碼

最后,把最終代碼粘貼出來(lái):

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta txt="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style type="text/css">
  * {
   margin: 0;
   padding: 0;
   -webkit-box-sizing: border-box;
   box-sizing: border-box;
  }

  body {
   background: #efefef;
  }

  .clsinp {
   width: 100%;
   height: 40px;
   outline: none;
   line-height: 40px;
   font-size: 16px;
   padding: 0 10px;
   margin-top: 20px;
   color: blue;
  }

  .clsmsg {
   padding: 10px 10px;
  }

  .clsmsg span {
   color: blue;
  }

 </style>
</head>

<body>
 <div id="app">
  <input v-model="txt" class="clsinp" maxlength="16" placeholder="請(qǐng)輸入內(nèi)容" type="text">
  <div class="clsmsg">
   <p>內(nèi)容:<span>{{computedTxt}}</span></p>
   <p>輸入的字符個(gè)數(shù):<span>{{computedCharLen}}</span></p>
   <p>輸入的字節(jié)個(gè)數(shù):<span>{{computedByteLen}}</span></p>
  </div>
 </div>
</body>

</html>

<script type="text/javascript" src="./vue2.5.1.js"></script>
<script type="text/javascript">
 var vm = new Vue({
  el: '#app',
  data() {
   return {
    txt: ''
   }
  },
  // 后期代碼在下面補(bǔ)充
  methods: {
   methodGetByteLen(str, len) {
    if (this.computedByteLen <= len) {
     return str
    }
    for (let i = Math.floor(len / 2); i < str.length; i++) {
     if (str.substr(0, i).replace(/[^\x00-\xff]/g, '01').length >= len) {
      return str.substr(0, Math.floor(i / 2) * 2) + '...'
     }
    }
   }
  },
  computed: {
   // 獲取字符的個(gè)數(shù)
   computedCharLen() {
    return this.txt.length
   },
   // 獲取字節(jié)的個(gè)數(shù)
   computedByteLen() {
    return this.txt.replace(/[^\x00-\xff]/g, '01').length
   },
   // 控制顯示的內(nèi)容
   computedTxt() {
    return this.methodGetByteLen(this.txt, 10)
   }
  }
 })

</script>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在vue2?中使用?tailwindcss的方法?親測(cè)可用

    在vue2?中使用?tailwindcss的方法?親測(cè)可用

    這篇文章主要介紹了在vue2?中使用?tailwindcss的方法?親測(cè)可用,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Vue3的效率提升主要表現(xiàn)在哪些方面示例解析

    Vue3的效率提升主要表現(xiàn)在哪些方面示例解析

    Vue3帶來(lái)了許多性能優(yōu)化和效率提升的特性,本文將重點(diǎn)討論Vue3在靜態(tài)提升、預(yù)字符串化、緩存事件處理函數(shù)、Block?Tree和PatchFlag方面的改進(jìn),我們將通過(guò)對(duì)比Vue2和Vue3的編譯結(jié)果來(lái)說(shuō)明這些方面的效率提升
    2023-12-12
  • vue + vuex todolist的實(shí)現(xiàn)示例代碼

    vue + vuex todolist的實(shí)現(xiàn)示例代碼

    這篇文章主要介紹了vue + vuex todolist的實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue實(shí)現(xiàn)tab切換的兩種方法示例詳解

    Vue實(shí)現(xiàn)tab切換的兩種方法示例詳解

    這篇文章主要介紹了Vue實(shí)現(xiàn)tab切換的兩種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Vue3.x如何操作v-html指令中HTML的DOM和樣式

    Vue3.x如何操作v-html指令中HTML的DOM和樣式

    在 Vue3.x 中,v-html 指令用于將 HTML 字符串渲染為真實(shí)的 DOM 元素,下面我們來(lái)看看具體如何操作v-html指令中HTML的DOM和樣式吧
    2025-04-04
  • 利用Vue實(shí)現(xiàn)移動(dòng)端圖片輪播組件的方法實(shí)例

    利用Vue實(shí)現(xiàn)移動(dòng)端圖片輪播組件的方法實(shí)例

    輪播圖是前端很常用的一個(gè)網(wǎng)頁(yè)特效,幾乎所有的網(wǎng)站或多或少都會(huì)用到這個(gè)特效。下面這篇文章主要給大家介紹了關(guān)于利用Vue實(shí)現(xiàn)移動(dòng)端圖片輪播組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-08-08
  • Vue中foreach數(shù)組與js中遍歷數(shù)組的寫(xiě)法說(shuō)明

    Vue中foreach數(shù)組與js中遍歷數(shù)組的寫(xiě)法說(shuō)明

    這篇文章主要介紹了Vue中foreach數(shù)組與js中遍歷數(shù)組的寫(xiě)法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • vue?@click?@tap重疊事件區(qū)分方式

    vue?@click?@tap重疊事件區(qū)分方式

    這篇文章主要介紹了vue?@click?@tap重疊事件區(qū)分方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式

    nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式

    這篇文章主要介紹了nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue+node+socket io實(shí)現(xiàn)多人互動(dòng)并發(fā)布上線全流程

    vue+node+socket io實(shí)現(xiàn)多人互動(dòng)并發(fā)布上線全流程

    這篇文章主要介紹了vue+node+socket io實(shí)現(xiàn)多人互動(dòng)并發(fā)布上線全流程,本文給大家提到了socket.io相關(guān)用法概覽及開(kāi)發(fā)流程,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

高清| 广安市| 大石桥市| 新余市| 鹤山市| 拉孜县| 大荔县| 余干县| 章丘市| 新平| 桃源县| 繁峙县| 梁平县| 甘德县| 鄂州市| 江城| 临邑县| 阿克陶县| 陆川县| 旅游| 密山市| 县级市| 永定县| 额敏县| 张家口市| 荆州市| 广安市| 大方县| 潼关县| 弥勒县| 昌平区| 胶南市| 华蓥市| 康定县| 浦北县| 莱阳市| 尤溪县| 安塞县| 安多县| 根河市| 岳普湖县|