jQuery颜色面板插件

/**
 * jQuery颜色面板插件
 * 
 * 使用方法:input框的id默认为inputObj,button框的id默认为btnObj,也可以自定义aaa,bbb
 *          1、初始化颜色面板:$.color.initColor();
 *          2、绑定颜色面板:$.color.showColor();或者$.color.showColor({inputObj:'aaa',btnObj:'bbb'})
 * @author Ivan 2862099249@qq.com
 * @date 2014年12月13日 下午3:06:55 
 * @version V1.0
 * @param $
 */
(function($) {

    $.color = {};

    var colorHex = [ '00', '33', '66', '99', 'CC', 'FF' ];
    var spColorHex = [ 'FF0000', '00FF00', '0000FF', 'FFFF00', '00FFFF','FF00FF' ];

    var colorPanel = '<div >;

    function initColor() {
        $("body").append(colorPanel);
        var colorTable = '';
        for (var i = 0; i < 2; i++) {
            for (var j = 0; j < 6; j++) {
                colorTable += '<tr height=12>';
                colorTable += '<td width=11 >';

                if (i == 0) {
                    colorTable += '<td width=11 + colorHex[j] + colorHex[j] + colorHex[j] + '">';
                } else {
                    colorTable += '<td width=11 + spColorHex[j] + '">';
                }

                colorTable += '<td width=11 >';
                for (var k = 0; k < 3; k++) {
                    for (var l = 0; l < 6; l++) {
                        colorTable += '<td width=11 + colorHex[k + i * 3] + colorHex[l]+ colorHex[j] + '">';
                    }
                }
            }
        }

        colorTable = '<table width=232  cellspacing="0" cellpadding="0"  bordercolor="000000">'
                + '<tr height=30><td colspan=21 bgcolor=#ffffff>'
                + '<table cellpadding="0" cellspacing="1"  >'
                + '<tr><td width="3"><td><input type="text" ></td>'
                + '<td width="3"><td><input type="text" >关闭</a></td></tr></table></td></table>'
                + '<table >'
                + colorTable + '</table>';
        $("#colorPanel").html(colorTable);
    }
    
    // 插件的defaults
    $.color.defaults = {
        inputObj : 'inputObj',
        btnObj : 'btnObj'
    };
    
    // 十六进制颜色值的正则表达式
    var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
    /* RGB颜色转换为16进制 */
    String.prototype.colorHex = function() {
        var that = this;
        if (/^(rgb|RGB)/.test(that)) {
            var aColor = that.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
            var strHex = "#";
            for (var i = 0; i < aColor.length; i++) {
                var hex = Number(aColor[i]).toString(16);
                if (hex === "0") {
                    hex += hex;
                }
                strHex += hex;
            }
            if (strHex.length !== 7) {
                strHex = that;
            }
            return strHex;
        } else if (reg.test(that)) {
            var aNum = that.replace(/#/, "").split("");
            if (aNum.length === 6) {
                return that;
            } else if (aNum.length === 3) {
                var numHex = "#";
                for (var i = 0; i < aNum.length; i += 1) {
                    numHex += (aNum[i] + aNum[i]);
                }
                return numHex;
            }
        } else {
            return that;
        }
    };

    /* 16进制颜色转为RGB格式 */
    String.prototype.colorRgb = function() {
        var sColor = this.toLowerCase();
        if (sColor && reg.test(sColor)) {
            if (sColor.length === 4) {
                var sColorNew = "#";
                for (var i = 1; i < 4; i += 1) {
                    sColorNew += sColor.slice(i, i + 1).concat(
                            sColor.slice(i, i + 1));
                }
                sColor = sColorNew;
            }
            // 处理六位的颜色值
            var sColorChange = [];
            for (var i = 1; i < 7; i += 2) {
                sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
            }
            return "RGB(" + sColorChange.join(",") + ")";
        } else {
            return sColor;
        }
    };
    
    $.color.showColor = function(options){
        
        var opts = $.extend({}, $.color.defaults, options);
        $('#' + opts.btnObj).click(function() {
            // 定位
            var ttop = $(this).offset().top; // 控件的定位点高
            var thei = $(this).height(); // 控件本身的高
            var tleft = $(this).offset().left; // 控件的定位点宽

            $("#colorPanel").css({
                top : ttop + thei + 5,
                left : tleft
            });

            $("#colorPanel").show();

            $("#CT tr td").unbind("click").mouseover(function() {
                var rgbColor = $(this).css("background-color");
                var hexColor = rgbColor.colorHex();
                
                $("#DisColor").css("background-color", hexColor);
                $("#HexColor").val(hexColor);
            }).click(function() {
                var rgbColor = $(this).css("background-color");
                var hexColor = rgbColor.colorHex();
                
                $('#' + opts.inputObj).val(hexColor).css("color", hexColor);
                $("#colorPanel").hide();
            });

            $("#_cclose").click(function() {
                $("#colorPanel").hide();
            }).css({
                "font-size" : "12px",
                "padding-left" : "20px"
            });
        });
    };
    
    $.color.initColor = function(){
        initColor();
        $("#colorPanel").hide();
    };

})(jQuery);