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

Vue自定義指令實(shí)現(xiàn)對(duì)數(shù)字進(jìn)行千分位分隔

 更新時(shí)間:2024年02月20日 08:28:54   作者:JYeontu  
對(duì)數(shù)字進(jìn)行千分位分隔后展示應(yīng)該是大部分同學(xué)都做過的功能了吧,常規(guī)的做法通常是編寫一個(gè)工具函數(shù)來對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,那么我們可不可以通過vue指令來實(shí)現(xiàn)這一功能呢,下面我們就來探索一下呢

說在前面

對(duì)數(shù)字進(jìn)行千分位分隔后展示應(yīng)該是大部分同學(xué)都做過的功能了吧,常規(guī)的做法通常是編寫一個(gè)工具函數(shù)來對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,那么我們可不可以通過vue指令來實(shí)現(xiàn)這一功能呢?

效果展示

實(shí)現(xiàn)原理

非輸入框

非輸入框我們只需要對(duì)其展示進(jìn)行處理,我們可以判斷綁定元素的innerHTML是否不為空,不為空的話則直接對(duì)其innerHTML內(nèi)容進(jìn)行格式化。

export default {
    bind: function (el, binding) {
        const separator = binding.value || ",";
        if (el.innerHTML) {
            el.innerHTML = addThousandSeparator(el.innerText, separator);
        }
    },
};

輸入框

對(duì)于輸入框,我們希望其有以下功能:

1、輸入的時(shí)候去掉分隔符

這里我們只需要監(jiān)聽元素的聚焦(focus)事件即可,取到元素的值,將其分隔符去掉后重新賦值。

el.addEventListener("focus", (event) => {
    const value = event.target.value;
    event.target.value = deleteThousandSeparator(value, separator);
});

2、輸入完成后添加分隔符

這里我們只需要監(jiān)聽元素的失焦(blur)事件即可,取到元素的值,對(duì)其進(jìn)行添加分隔符處理后重新賦值。

el.addEventListener("blur", (event) => {
    const value = event.target.value;
    event.target.value = addThousandSeparator(value, separator);
});

千分位分隔函數(shù)

function addThousandSeparator(num, separator = ",") {
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, separator);
}

num.toString(): 將輸入的數(shù)字 num 轉(zhuǎn)換為字符串,以便后續(xù)處理。

.replace(/\B(?=(\d{3})+(?!\d))/g, separator): 這里使用了正則表達(dá)式進(jìn)行替換操作。具體解釋如下:

  • \B: 表示非單詞邊界,用于匹配不在單詞邊界處的位置。
  • (?=(\d{3})+(?!\d)): 使用正向預(yù)查來匹配每三位數(shù)字的位置,但不匹配末尾不足三位的數(shù)字。
  • (\d{3})+: 匹配連續(xù)的三位數(shù)字。
  • separator: 作為參數(shù)傳入的分隔符,默認(rèn)為 ,。
  • g: 表示全局匹配,即匹配所有滿足條件的位置。

這樣,通過正則表達(dá)式的替換功能,在數(shù)字字符串中的每三位數(shù)字之間插入指定的千位分隔符,從而實(shí)現(xiàn)千位分隔符的添加。

去掉千分位分隔

function deleteThousandSeparator(numberString, separator = ",") {
    return numberString.replace(new RegExp(separator, "g"), "");
}

直接將字符串中的分隔符全部替換為空即可。

完整代碼

function addThousandSeparator(num, separator = ",") {
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, separator);
}
function deleteThousandSeparator(numberString, separator = ",") {
    return numberString.replace(new RegExp(separator, "g"), "");
}
export default {
    bind: function (el, binding) {
        const separator = binding.value || ",";
        if (el.innerHTML) {
            el.innerHTML = addThousandSeparator(el.innerText, separator);
        }
        el.addEventListener("focus", (event) => {
            const value = event.target.value;
            event.target.value = deleteThousandSeparator(value, separator);
        });
        el.addEventListener("blur", (event) => {
            const value = event.target.value;
            event.target.value = addThousandSeparator(value, separator);
        });
    },
};

組件庫

組件文檔

目前該組件也已經(jīng)收錄到我的組件庫,組件文檔地址如下:http://jyeontu.xyz/jvuewheel/#/JThousandView

組件內(nèi)容

組件庫中還有許多好玩有趣的組件,如:

  • 懸浮按鈕
  • 評(píng)論組件
  • 詞云
  • 瀑布流照片容器
  • 視頻動(dòng)態(tài)封面
  • 3D輪播圖
  • web桌寵
  • 貢獻(xiàn)度面板
  • 拖拽上傳
  • 自動(dòng)補(bǔ)全輸入框
  • 圖片滑塊驗(yàn)證

等等……

組件庫源碼

組件庫已開源到gitee,有興趣的也可以到這里看看:https://gitee.com/zheng_yongtao/jyeontu-component-warehouse

以上就是Vue自定義指令實(shí)現(xiàn)對(duì)數(shù)字進(jìn)行千分位分隔的詳細(xì)內(nèi)容,更多關(guān)于Vue數(shù)字千位分隔的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

岑溪市| 常熟市| 东阿县| 伊川县| 肃南| 淅川县| 中西区| 修文县| 新郑市| 镇坪县| 白城市| 临朐县| 两当县| 通渭县| 泸州市| 沂源县| 信阳市| 灌云县| 奉新县| 德庆县| 平和县| 锡林郭勒盟| 桐柏县| 云安县| 奈曼旗| 思南县| 栾川县| 集安市| 基隆市| 张家港市| 突泉县| 元阳县| 开原市| 桃源县| 广饶县| 犍为县| 收藏| 宣汉县| 石首市| 邵东县| 凭祥市|