处理金额中符号、整数、小数、单位显示不同样式的jquery插件

需求:

做商品的时候,要做商品金额,如下图所示

一共有四个部分,第一部分可能显示金钱符号¥,第二部分是金额整数部分,第三部分是金额小数部分,第四部分是金额的单位

从后台拿到的金额是一个整体,如果这样的场景用的很多,则每次都需要用js对数据处理一次,然后赋予不同的样式。

设计:

我们可以设计的HTML结构大概是这样的

<style>

.price-lg {color: #e50013;font-size: 56px;font-family: "arial";}

.price-mid {color: #e50013;font-size: 42px;font-family: "arial";}

.price-font {color: #595757;font-family: "Microsoft YaHei";font-size: 16px;}

</style>

<p>

  <span class="price-lg">9999</span>

  <span class="price-mid">.99</span>

  <span class="price-font">元</span>

</p>

事实上,p元素中的金额是处理好的,我们拿到的数据是9999.99,如果金额是99999.99元,则显示的应该是9.99万元了。因此,用纯粹的html难以处理

我们可以基于jquery制作一个插件,自动分解金额,然后赋予样式显示。

<p uipn="cccPrice" uipd="{price:‘9999.99‘,css:{integerPart:‘price-lg‘,decimalsPart:‘price-mid‘,unitPart:‘price-font‘}}"></p>

uipn为自定义属性,参数为插件的方法名字

uipd为自定义属性,参数为插件需要的数据

定义一个自动执行的common.js,这个js自动获取到页面中拥有uipn属性的元素,然后寻找属性中名字的插件,自动执行。代码如下:

$(function () {
  $.fn.xrPluginInit();
});

(function ($) {
$.fn.uiPluginInit = function () {
  var uiPlugin = $("[uipn]");

  $.each(uiPlugin, function (i, p) {
    var pluginName = $(p).attr("uipn");
    var pluginData = $(p).attr("uipd");
    var initPluginStatement = ‘$(p).‘ + pluginName + ‘(‘ + pluginData + ‘)‘;
    try {
      eval(initPluginStatement);
    } catch (e) {
      console.log(‘错误‘ + e.name + ‘:‘ + e.message+"pluginName不存在,或者pluginData数据解析有误!");
    }
  });
}
})(jQuery);

定义ui.price.js,代码如下:

/**
 * 用于分割金额
 * 需要引入jquery
 * 需要引入xr.ui.common.js ,位置放到引入的插件后面
 * 使用示例   <p xrpn="cccPrice" xrpd="{price:‘899999989.99‘,css:{integerPart:‘price-lg‘,decimalsPart:‘price-mid‘,unitPart:‘price-font‘}}"></p>
 */
(function ($) {
    var css = {
        integerPart: "integerPart", //金额的整数部分
        decimalsPart: "decimalsPart", //金额的小数部分
        unitPart: "unitPart",  //金额的数字部分
        signPart: "signPart" //金额的符号部分
    }
    //创建一个span元素
    function cSpan() {
        return $("<span></span>");
    }

    /**
     * 创建html代码
     */
    function createHtml($this) {
        var price = options.price + "";
        css = options.css || css;
        var integerCss = css.integerPart;
        var decimalsCss = css.decimalsPart;
        var unitCss = css.unitPart;
        var signCss = css.signPart;
        var pSpanInt = cSpan();
        var pSpanDecimals = cSpan();
        var pSpanUint = cSpan();
        //定义一个金额数组
        var pArr = new Array();
        if (price.indexOf(".") > -1) {
            pArr.push(price.split(".")[0]);
            pArr.push(price.split(".")[1]);
            if (pArr[1].length < 2) {
                price = price + "0";
                pArr[1] = pArr[1] + "0";
            }
        } else {
            price = price + ".00";
            pArr.push(price.split(".")[0]);
            pArr.push(price.split(".")[1]);
        }
        //处理金额。
        var pLen = pArr[0].length;

        //注:如果金额是88元,后台应给出数据88.00元;如果是88.8元,应给出数据88.80元。即小数点后无数据应补零

        //判断金额单位是亿元   888888888.88元 --8.88亿元
        if (pLen > 8) {
            price = parseFloat(price) / 100000000;
            price = price + "";
            pSpanInt.html(price.split(".")[0]).addClass(integerCss);
            pSpanDecimals.html("." + price.split(".")[1].substring(0, 2)).addClass(decimalsCss);
            pSpanUint.html("亿元").addClass(unitCss);
        }
        //判断金额单位是万元   88888.88元 --8.88万元
        else if (pLen > 4) {
            price = parseFloat(price) / 10000;
            price = price + "";
            pSpanInt.html(price.split(".")[0]).addClass(integerCss);
            pSpanDecimals.html("." + price.split(".")[1].substring(0, 2)).addClass(decimalsCss);
            pSpanUint.html("万元").addClass(unitCss);
        }
        //判断金额单位是元   8.88元
        else {
            price = price + "";
            pSpanInt.html(price.split(".")[0]).addClass(integerCss);
            pSpanDecimals.html("." + price.split(".")[1]).addClass(decimalsCss);
            pSpanUint.html("元").addClass(unitCss);
        }
        $this.html("");
        if (options.bShowMoneySign) {
            var signSpan = cSpan();
            signSpan.html("¥").addClass(signCss);
            $this.append(signSpan);
        }
        $this.append(pSpanInt).append(pSpanDecimals).append(pSpanUint);
    }

    /**
     * 公共方法体
     * @type {{init: Function, destroy: Function, option: Function}}
     */
    var methods = {
        /**
         * 初始化函数
         * @param initOptions
         * @returns {*}
         */
        init: function (initOptions) {
            var $this = $(this);
            return this.each(function () {
                options = $.extend({}, options, $.fn.cccPrice.defaults, initOptions);
                createHtml($this);
            });
        },
        /**
         *预留函数
         * @returns {*}
         */
        destroy: function () {
            return this.each(function () {
            });
        },

        /**
         *
         * @param key
         * @param value
         * @returns {*}
         */
        option: function (key, value) {
            if (arguments.length == 2)
                return this.each(function () {
                    if (options[key]) {
                        options[key] = value;
                    }
                });
            else
                return options[key];
        }
    }

    var methodName = "cccPrice";

    var options = {};

    /**
     * 插件入口
     * @returns {*}
     */
    $.fn.cccPrice = function () {
        var method = arguments[0];
        if (methods[method]) {
            method = methods[method];
            arguments = Array.prototype.slice.call(arguments, 1);
        } else if (typeof method === "object" || !method) {
            method = methods.init;
        } else {
            $.error("Method(" + method + ") does not exist on " + methodName);
            return this;
        }
        return method.apply(this, arguments);
    }

    /**
     * 插件使用的数据
     * @type {{data: Array, className: string, postLoad: null}}
     */
    $.fn.cccPrice.defaults = {
        bShowMoneySign: false  //是否显示金额前面的¥符号,默认不显示
    };
})(jQuery);

js引入的顺序

1.jquery

2.ui.price.js

3.common.js

时间: 2024-10-29 04:11:20

处理金额中符号、整数、小数、单位显示不同样式的jquery插件的相关文章

jqGrid 是一个用来显示网格数据的jQuery插件

jqGrid 是一个用来显示网格数据的jQuery插件,通过使用jqGrid可以轻松实现前端页面与后台数据的ajax异步通信.文档比较全面,其官方网址为:http://www.trirand.com. 一.jqGrid特性: 基于jquery UI主题,开发者可以根据客户要求更换不同的主题. 兼容目前所有流行的web浏览器. Ajax分页,可以控制每页显示的记录数. 支持XML,JSON,数组形式的数据源. 提供丰富的选项配置及方法事件接口. 支持表格排序,支持拖动列.隐藏列. 支持滚动加载数据

ext中grid根据数据不同显示不同样式

核心代码: var clsRender = function(value){ if (value == 'male') { return "<span style='color:red;font-weight:bold;'>红男</span>"; } else { return "<span style='color:green;font-weight:bold;'>绿女</span>"; } }}, var cm =

让png在ie下正常显示 用到了jquery插件DD_belatedPNG 但是在ie6中这句话 前面添加有效 后面移除无效 IE6 jq removeClass无效

jQuery(this).addClass("background").siblings().removeClass("background") 导致IE6移除的css无效: 通过css渲染效果解决:{ background:url(/images/about_us.png) no-repeat left top;_background:none;filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(e

ListView显示不同样式的item

先look图 我们再使用listview时,listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的item需要图片,有的不需要,但是这些又必须在同一个listview中显示,这时我们就需要在listview中显示多种样式的item,首先我们需要考虑的是如何将不同数量的数据装载到ArrayList<~>中呢,先看看下面的listViewItem,. 1 package com.example.ker

构造和显示具有样式的Text

1.问题: 你希望能够在UI 组建中直接能够显示富文本,而不是针对每一种格式创建一个单独的UI组件.例如,你想要在一个UILabel 中显示一个句子,该句子中只有一个单词是粗体. 2.富文本是很好的东西!许多程序员需要在UI 组建中的一行文本内显示各种样式的字符串. 构造属性字符串的最好方法就是使用NSMutableAttributedString 类的initWithString:方法,同时传递一个NSString 到这个方法中.这将会创建一个没有任何属性的属性字符串.然后,通过NSMutab

★★★【卡法 常用js库】: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度

[卡法 常用js库]: js汇合 表单验证  cookie设置  日期格式  电话手机号码  email  整数  小数  金额   检查参数长度 // +---------------------------------------------------------------------- // | sunqiang // +---------------------------------------------------------------------- // | Copyrig

c#中decimal的去0显示

在近来的开发中,遇到到了decimal中显示0的问题,搞了很久才搞好了,现在就简单介绍一下其中一小部分,其他的网上很上很多 public static string DecimalToString(decimal d)        {            return d.ToString("#0.######");        } 这个的显示很简单给几个例子就懂了,注意第一个结果,是会四舍五入的 private void button1_Click(object sender,

Java中对整数格式化

Java中对整数格式化 1.说明    对整数进行格式化:%[index$][标识][最小宽度]转换方式 2.实例分析 (1)源码 /** * 1. 对整数进行格式化:%[index$][标识][最小宽度]转换方式 * 2. 对浮点数进行格式化:%[index$][标识][最少宽度][.精度]转换方式 * 3. 对字符进行格式化:对字符进行格式化是非常简单的,c表示字符,标识中'-'表示左对齐 * 4. 对百分比符号进行格式化: */ package com.you.model; /** * @

sql 除法运算结果为小数时显示0的解决方案 或者百分比

SELECT field1/field2 FROM TB; 当 field1的数值 > field2的数值时,除法得出的结果是<1的,即0.xxxxxx 这个时候在DB2的环境下SELECT出来的值是0 解決方法: 先把field1转换成DOUBLE类型的,这样计算出来的就会得出小数点了,会显示出0.xxxx SELECT CAST(field1 AS FLOAT)/field2 FROM TB; ps.網上搜的資料,寫的是double,但在SQL Server2008中一直報錯,改成FLOA