[置顶]MySQL常用操作

1.修改MySQL数据库默认编码

linux系统下,修改MySQL数据库默认编码的步骤为:
停止MySQL的运行
/etc/init.d/mysql start (stop) 为启动和停止服务器
MySQL主配置文件为my.cnf,一般目录为/etc/mysql
var/lib/mysql/ 放置的是数据库表文件夹,这里的mysql相当于windows下mysql的date文件夹
当我们需要修改MySQL数据库的默认编码时,需要编辑my.cnf文件进行编码修改,在linux下修改mysql的配置文件my.cnf,文件位置默认/etc/my.cnf文件

找到客户端配置[client] 在下面添加
default-character-set=utf8 默认字符集为utf8
在找到[mysql] 添加
default-character-set=utf8 默认字符集为utf8
在找到[mysqld] 添加
default-character-set=utf8 默认字符集为utf8

如果Starting MySQL…………The server quit without updating PID file (/var/lib/mysql/node1.pid). [faild]

改成 character_set_server=utf8;
init_connect=’SET NAMES utf8′ (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

修改好后,重新启动mysql 即可,重新查询数据库编码可发现编码方式的改变:
>show variables like ‘character%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+

PS:jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8

 

查看表各列的字符编码:
show full columns from 表名;

2.修改用户访问权限

grant all on *.* to root@”%” identified by ‘abc123′;

3.创建用户并授权

create database taxioncall;
CREATE USER ‘taxioncall’@’db01.yijiaoche.net’ IDENTIFIED BY ‘123456’;
grant all on *.* to taxioncall@”db01.yijiaoche.net” identified by ‘123456’;
grant all on *.* to taxioncall@”localhost” identified by ‘123456’;

1)创建数据库bugs
create database reviewboard;
2)对bugs进行设置权限
grant all privileges on reviewboard.* to ‘reviewboard’@’localhost’ identified by ‘reviewboard';
grant all privileges on reviewboard.* to ‘reviewboard’@’%’ identified by ‘reviewboard';
其中on后面的bugs为数据库名,to后面的bugs为用户名,by后面的root为密码(用户可自行设置)
3)从mysql数据库授权表中重新装载权限
Flush privileges;

4.修改表字符集

ALTER TABLE temp CONVERT TO CHARACTER SET utf8 collate utf8_unicode_ci

对中、英文来说没有实质的差别。
utf8_general_ci校对速度快,但准确度稍差。
utf8_unicode_ci准确度高,但校对速度稍慢。

如果你的应用有德语、法语或者俄语,请一定使用utf8_unicode_ci。

我自己一般用utf8_general_ci就够了,到现在也没发现问题。。。

Phonegap创建文件

document.addEventListener("deviceready", onDeviceReady, false);//准备phonegap  
  
function onDeviceReady() {  
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);  
}  
  
function gotFS(fileSystem) {  
fileSystem.root.getDirectory("dataFile", {create:true,exclusive:false},createFile,fail);//建立文件夹,如果直接在sd 卡里,省去这个函数,onDeviceReady函数直接写到createFile文件  
}  
function createFile(dirEntry){ //dirEntry 这个参数就是gotFS函数创建的文件夹dataFile的一个对象,在这个对象下使用getFile就可以在所创建的文件夹下创建文件了  
dirEntry.getFile("print.txt", {create: true, exclusive: false}, gotFileEntry, fail); //在所建立的文件夹内,创立print.txt文件  
}  
function gotFileEntry(fileEntry) {  
fileEntry.createWriter(gotFileWriter, fail);  
}  
function gotFileWriter(writer) {  
writer.onwriteend = function(evt) {  
writer.truncate(11);  
writer.onwriteend = function(evt) {  
writer.seek(0);//添加内容的位置,这里是0,就是替换之前的内容  
writer.write('content');//添加内容  
};  
};  
writer.write('content');//写入内容  
}  
function fail(error) {  
console.log(error.code);//如果创建,写入内容失败,显示错误,用于调试  
}  

JS判断系统/浏览器类型

  var browser={
    versions:function(){ 
           var u = navigator.userAgent, app = navigator.appVersion; 
           return {//移动终端浏览器版本信息 
                trident: u.indexOf('Trident') > -1, //IE内核
                presto: u.indexOf('Presto') > -1, //opera内核
                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
                iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
            };
         }(),
         language:(navigator.browserLanguage || navigator.language).toLowerCase()
}

JavaScript 的列隊 (Queue) 和堆疊 (Stack)

在JavaScript中,我們也可以使用到列隊(Queue)和堆疊(Stack)這兩個數據結構。最簡單的方法是使用JS內置的陣列(Array)和內置的方法模仿列隊(Queue)和堆疊(Stack),達至先進先出(FIFO, First-In-First-Out)和後進先出(LIFO, Last In First Out)的原理。
內置push, pop, shift和unshift方法
JavaScript的陣列提供了4個方法,分別是push()、pop()、shift()和unshift()。我們先看看下面的圖片了解運用的方式。
如果我們假設左邊是頭(front),右邊是尾(rear)。如果要將新的元素加入數據結構之中,可以使用push()方法將元素加至數據結構的尾(rear),使用unshift()方法則可以加至數據結構的頭(front)。如果要刪除數據結構內的元素,可以使用pop()方法將元素由數據結構的尾(rear)刪除並返回,使用shift()方法將元素由數據結構的頭(front)刪除並返回。

很明顯,我們可以使用push()和shift()兩個方法做到先進先出(FIFO, First-In-First-Out)的原理。另外,unshift()和pop()兩個方法也可以做到先進先出(FIFO, First-In-First-Out)的原理;而push()和pop()兩個方法做到後進先出(LIFO, Last In First Out)的原理。shift()和unshift()兩個方法也可以做到後進先出(LIFO, Last In First Out)的原理。
使用push()和shift()兩個方法的列隊(Queue)例子

var fifoQueue = new Array();
// 建立新的Queue
 
fifoQueue.push("FoolEgg.com");
fifoQueue.push(123456789);
var ptr = fifoQueue.push(98.7654321);
// 將「FoolEgg.com」字串、「123456789」整數和「98.7654321」浮點數加入Queue
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.shift() + "]<br />");
// 刪除並返回最頭的元素「FoolEgg.com」字串
 
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.shift() + "]<br />");
// 刪除並返回最頭的元素「123456789」整數
 
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.shift() + "]<br />");
// 刪除並返回最頭的元素「98.7654321」浮點數
 
document.writeln("Delete the element [" + fifoQueue.shift() + "]<br />");
// 刪除並返回最頭的元素
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");

以下是輸出的結果︰
ptr is 3
The length of queue is 3 and the elements are [FoolEgg.com,123456789,98.7654321]
Delete the element [FoolEgg.com]
The length of queue is 2 and the elements are [123456789,98.7654321]
Delete the element [123456789]
The length of queue is 1 and the elements are [98.7654321]
Delete the element [98.7654321]
Delete the element [undefined]
ptr is 3
The length of queue is 0 and the elements are []
使用unshift()和pop()兩個方法的列隊(Queue)例子

var fifoQueue = new Array();
// 建立新的Queue
 
fifoQueue.unshift("FoolEgg.com");
fifoQueue.unshift(123456789);
var ptr = fifoQueue.unshift(98.7654321);
// 將「FoolEgg.com」字串、「123456789」整數和「98.7654321」浮點數加入Queue
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.pop() + "]<br />");
// 刪除並返回最頭的元素「FoolEgg.com」字串
 
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.pop() + "]<br />");
// 刪除並返回最頭的元素「123456789」整數
 
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");
 
document.writeln("Delete the element [" + fifoQueue.pop() + "]<br />");
// 刪除並返回最頭的元素「98.7654321」浮點數
 
document.writeln("Delete the element [" + fifoQueue.pop() + "]<br />");
// 刪除並返回最頭的元素
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of queue is " + fifoQueue.length + " and the elements are [" + fifoQueue + "]<br />");

以下是輸出的結果︰
ptr is 3
The length of queue is 3 and the elements are [98.7654321,123456789,FoolEgg.com]
Delete the element [FoolEgg.com]
The length of queue is 2 and the elements are [98.7654321,123456789]
Delete the element [123456789]
The length of queue is 1 and the elements are [98.7654321]
Delete the element [98.7654321]
Delete the element [undefined]
ptr is 3
The length of queue is 0 and the elements are []
使用push()和pop()兩個方法的堆疊(Stack)例子

var lifoStack = new Array();
// 建立新的Stack
 
lifoStack.push("FoolEgg.com");
lifoStack.push(123456789);
var ptr = lifoStack.push(98.7654321);
// 將「FoolEgg.com」字串、「123456789」整數和「98.7654321」浮點數加入Stack
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.pop() + "]<br />");
// 刪除並返回最頂的元素「98.7654321」浮點數
 
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.pop() + "]<br />");
// 刪除並返回最頂的元素「123456789」整數
 
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.pop() + "]<br />");
// 刪除並返回最頂的元素「FoolEgg.com」字串
 
document.writeln("Delete the element [" + lifoStack.pop() + "]<br />");
// 刪除並返回最頂的元素
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");

以下是輸出的結果︰
ptr is 3
The length of stack is 3 and the elements are [FoolEgg.com,123456789,98.7654321]
Delete the element [98.7654321]
The length of stack is 2 and the elements are [FoolEgg.com,123456789]
Delete the element [123456789]
The length of stack is 1 and the elements are [FoolEgg.com]
Delete the element [FoolEgg.com]
Delete the element [undefined]
ptr is 3
The length of stack is 0 and the elements are []
使用shift()和unshift()兩個方法的堆疊(Stack)例子

var lifoStack = new Array();
// 建立新的Stack
 
lifoStack.unshift("FoolEgg.com");
lifoStack.unshift(123456789);
var ptr = lifoStack.unshift(98.7654321);
// 將「FoolEgg.com」字串、「123456789」整數和「98.7654321」浮點數加入Stack
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.shift() + "]<br />");
// 刪除並返回最頭的元素「98.7654321」浮點數
 
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.shift() + "]<br />");
// 刪除並返回最頭的元素「123456789」整數
 
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");
 
document.writeln("Delete the element [" + lifoStack.shift() + "]<br />");
// 刪除並返回最頭的元素「FoolEgg.com」字串
 
document.writeln("Delete the element [" + lifoStack.shift() + "]<br />");
// 刪除並返回最頭的元素
 
document.writeln("ptr is " + ptr + "<br />");
document.writeln("The length of stack is " + lifoStack.length + " and the elements are [" + lifoStack + "]<br />");

以下是輸出的結果︰
ptr is 3
The length of stack is 3 and the elements are [98.7654321,123456789,FoolEgg.com]
Delete the element [98.7654321]
The length of stack is 2 and the elements are [123456789,FoolEgg.com]
Delete the element [123456789]
The length of stack is 1 and the elements are [FoolEgg.com]
Delete the element [FoolEgg.com]
Delete the element [undefined]
ptr is 3
The length of stack is 0 and the elements are []

Phonegap Media 录音播放文件地址

录音:
var src = “yjc/audio/myrecording.mp3″;//默认sdcard根目录,如果没有sd卡则为手机/data/data/(app package)/cache/

播放:
my_media = new Media(src, onSuccess, onError);//如果android_asset开头就在这里找,如果没有根据地质直接找,如果还没有sdcard找

PHP遍历文件及其文件夹下的文件

<?php
$path = '.';  
function getfiles($path)  
{  
    if(!is_dir($path)) return;  
	$handle  = opendir($path);  
    while( false !== ($file = readdir($handle)))  
    {  
        if($file != '.' && $file!='..')  
        {  
            $path2= $path.'/'.$file;  
            if(is_dir($path2))  
            {  
				getfiles($path2);  
            }else 
            {    
               echo $path2.'<br/>';  
            }  
        }  
    }  
}  
 
 print_r( getfiles($path));  
?>

PhoneGap一个神奇的问题backbutton没效果,尤其1.6以后的版本

PhoneGap一个神奇的问题backbutton没效果,尤其1.6以后的版本

郁闷了我差不多一个下午时间才发现问题所在:

AndroidManifest.xml文件中使用

<uses-sdk        android:minSdkVersion=”4″        android:targetSdkVersion=”10″ />就没有问题

如果是
<uses-sdk android:minSdkVersion=”4″ /> 这样pg就不会触发你写的backbutton事件。

很神奇吧~原因未知

[置顶]Linux一些常用操作

1.修改ip、DNS
ip修改:/etc/sysconfig/network-scripts/ifcfg-eth0
DNS修改:修改 /etc/resolv.conf 增加下面这样的行,这样添加 DNS 服务器地址:nameserver 202.106.0.20
端口: netstat -tnlppa |grep 147

2.查看安装的rpm
rpm -qa 看看你安装了哪些包
rpm -ql xxxxxxx 去查看具体的包安装位置
rpm -ivh xxx.rpm 安装
rpm -e xxx.rpm 卸载

3.查看DNS解析过程(win上同样有效)
nslookup www.baidu.com

3.查看进程占用内存
top -d 1 -p pid(pid 可以通过ps获得)

4.自定义命令
$ vim ~/.bashrc
alias ll=’ls -l’   #加入此行
ps:加入后肯能无法当场起作用,
执行该句:
source ~/.bashrc
方法2:
mkdir /bin/custom,
并在/etc/profile中加入export PATH=PATH:/bin/custom
在/bin/custom中vi ll,写入ls -l可以使用$1 2等通配。
chmod +x ll

5.压缩解压命令
tar.bz2解压
tar -jxvf
tar.bz解压
tar -zxvf

6.查看文件夹大小
du -h –max-depth=1 bfs_slave/*

du -h –max-depth=1 bfs_slave

7.每隔一段时间执行
while [ 1 ]; do df -h; sleep 5; done;

如何写一个Jquery 的Plugin插件(超霸气文章~记录了)

想做一个好的插件必须应有的要求:

1、在JQuery命名空间下声明只声明一个单独的名称

2、接受options参数,以便控制插件的行为

3、暴露插件的默认设置 ,以便外面可以访问

4、适当地将子函数提供给外部访问调用

5、保持私有函数

6、支持元数据插件

下面将逐条地过一遍:

只声明一个单独的名称

这表明是一个单独的插件脚本。如果你的脚本包含多个插件或者是互补的插件(像$.fn.doSomething()和$.undoSomething()),那么你可以根据要求声明多个名称。但一般情况下,力争用单一的名称来维持插件现实的所有细节。

在本例中,我们将声明一个叫“hilight”的名称

// 插件的定义  
$.fn.hilight = function( options ){  
    // 这里就是插件的实现代码了...  
      
};

然后我们可以像这样调用它:

    $("divTest").hilight();

接受一个options参数,以便控件插件的行为

    $.fn.hilight = function(options){  
        var defaults = {  
            foreground    :    'red',  
            background    :    'yellow'  
        };  
        //Extends out defaults options with those privided 扩展我们默认的设置  
        $.extend(defaults,options);  
    };

而我们可以这样使用它:

    $('#myDiv').hilight({  
      foreground: 'blue'  
    });

暴露插件的默认设置 ,以便外面可以访问

作为插件的提升和优化,我们应该将上面的代码暴露出来作为插件的默认设置。

这非常重要,这样做让使用插件的用户可以非常容易地用最少的代码重写或自定义该插件。然而这个我们可以借助JavaScript function对象的优势:

    $.fn.hilight = function(options){  
        //Extend our default options with those provided  
        //Note that the first arg to extend is an empty object  
        //this is to keep from overriding our "defaults" object  
        var opts = $.extend({},$.fn.hilight.defaults,options);  
    }  
    $.fn.hilight.defaults = {  
        foreground    :    'red',  
        background    :    'yellow'  
    };

这里值得注意的是$.extend()第一个参数是一个空的对象,这样可以让我们重写插件的默认设置

用户可以像这样使用插件:

    // override plugin default foreground color  
    $.fn.hilight.defaults.foreground = 'blue';  
    // ...  
    // invoke plugin using new defaults  
    $('.hilightDiv').hilight();  
    // ...  
    // override default by passing options to plugin method  
    $('#green').hilight({  
      foreground: 'green'  
    });

适当地将子函数提供给外部访问调用

这个例子延续前面的例子,你会发现有一个有趣的方法可以扩展你的插件(然后还可以让其他人扩展你的插件 :))。例如,我们在插件里声明了一个函数叫“format”用来高这显示文本,我们的插件实现代码可能是这样子的:

    $.fn.hight = function(options){  
        //iterate and reformat each mached element  
        return this.each(function(){  
            var $this = $(this);  
            //...  
            var markup = $this.html();  
            //call our format function  
            markup = $.fn.hilight.format(markup);  
            $this.html(markup);  
        });  
    };  
    //define our format function  
    $.fn.hilight.format = function(txt){  
        return '<strong>' + txt + '</strong>';  
    };

保持私有函数

暴露插件有部分内容提供重写看上去似乎非常强大,但是你必须认真地考虑你的插件哪一部分是需要暴露出来的。一旦暴露出来,你就需要考虑这些变化点,一般情况下,如果你没有把握哪部分需要暴露出来,那么你可以不这样做。

那如何才能够定义更多的函数而不将其暴露出来呢?这个任务就交给闭包吧。为了证实,我们在插件中添加一个函数叫“debug”,这debug函数将会记录已选择的元素数量到FireBug控制台中。为了创建闭包,我们将插件定义的整部分都包装起来:

    //create closure  
    (function($){  
        //plugin definition  
        $.fn.hilight = function(options){  
            debug(this);  
            //...  
        };  
        //private function for debuggin  
        function debug($obj){  
            if(window.console && window.console.log){  
                window.console.log('hilight selection count :' + $obj.size());  
            }  
        }  
        //...  
        //end of closure  
    })(jQuery);

这样“debug”方法就不能被闭包这外调用了

 

支持元数据插件

 

依赖于所写的插件类型,并支持元数据插件会使得其本身更加强大。个人来讲,我喜欢元素据插件,因为它能让你分离标签中重写插件的配置(这在写demo和示例时特别有用)。最重要的是,想现实它特别的容易!

    $.fn.hilight = function(options){  
        //build main options before element interation  
        var opts = $.extend({},$.fn.hilight.defaults,options);  
        return this.each(function(){  
            var $this = $(this);  
            //build element specific options  
            var o = $.meta ? $.extend({},opts,$this.data()) : opts;  
      
             //一般句话,搞定支持元数据 功能         
        });  
    }

几行的变化完成了以下几件事:

1、检测元数据是否已经配置

2、如果已配置,将配置属性与额外的元数据进行扩展

    <!--  markup  -->  
    <div class="hilight { background: 'red', foreground: 'white' }">  
      Have a nice day!这是元数据  
    </div>  
    <div class="hilight { foreground: 'orange' }">  
      Have a nice day!在标签中配置  
    </div>  
    <div class="hilight { background: 'green' }">  
      Have a nice day!  
    </div>

 

然后我们通过一句脚本就可以根据元数据配置分开地高亮显示这些div标签:

    $('.hilight').hilight();

 

最后,将全部代码放在一起:

    //
    //create closure  
    //
    (function($){  
        //
        // plugin definition  
        //
        $.fn.hilight = function(options){  
            debug(this);  
            //build main options before element iteration  
            var opts = $.extend({}, $.fn.hilight.defaults, options);  
            //iterate and reformat each matched element  
            return this.each(function(){  
                $this = $(this);  
                //build element specific options  
                var o = $.meta ? $.extend({}, opts, $this.data()) : opts;  
                //update element styles  
                $this.css({  
                    backgroundColor: o.background,  
                    color: o.foreground  
                });  
                var markup = $this.html();  
            //call our format function  
              
            });  
        }  
          
        //
        // private function for debugging  
        //
        function debug($obj){  
            if(window.console && window.console.log){  
                window.console.log('hilight selection count: ' + $obj.size());  
            }  
        };  
        //
        // define and expose our format function  
        //
        $.fn.hilight.format = function(txt){  
            return '<strong>' + txt + '</strong>';  
        };  
          
        //
        // plugin defaults  
        //
        $.fn.hilight.defaults = {  
            foreground    :    'red',  
            background    :    'yellow'  
        };  
          
        //
        // end of clousure  
        //
    })(jQuery);

 

2、如何写一个Jquery 的Plugin插件

 

最近做项目想要一个控制会计数字输入的jquery插件,找了好久找不到, 没用办法,只有自己操刀上阵了,其实要求也不高, 就是:
1. 默认是: 0.00
2. 只能输入数字和小数点, 其它输入将被忽略
3. 输入整数后继续自动保持两位小数
4. 可以定义自己想保留几位小数

 

 

OK, 开始动手:

首先, 通过将函数封装为jquery plugin包, 可以将这个包非常容易的在各种项目和页面中使用, 而且代码管理维护起来方便. 再说, jquery的plugin实现起来超简单,为什么不这么做呢?如果你是第一次开发, 先阅读下这篇文章吧: How jQuery Works

 

一. Jquery Plugin 的基本框架

    (function($) {  
        $.fn.extend({  
            MyPlugin: function(options) {  
                var defaults = {  
                    decimal_length: 2,  
                };  
                var options = $.extend(defaults, options);  
                var len = parseInt(options['decimal_length']);  
                return this.each(function() {  
                    alert('edison');  
                });  
            }  
        });  
    })(jQuery);

 

其中options就是参数, 调用方法为:

    $('#ddd').MyPlugin({decimal_length:2});

好的, 我们接着完成要的功能: 文件名为 money.js

    (function($) {  
        var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";  
        $.fn.extend({  
            money_type: function(options) {  
                var defaults = {  
                    decimal_length: 2,  
                };  
                var options = $.extend(defaults, options);  
                var len = parseInt(options['decimal_length']);  
                return this.each(function() {  
                    var input = $(this);  
      
                    function caret() {  
                        var input_value = input.val();  
                        var reCat = /\d+\.?\d{0,2}/i;  
                        var_new_value = reCat.exec(input_value);  
                        input.val(var_new_value);  
                    }  
      
                    input.bind("click", function(e) {  
                        if (input.val() == '0.00') {  
                            input.select();  
                        }  
                    })  
                    .bind(pasteEventName, function() {  
                        setTimeout(caret, 0);  
                    });  
                });  
            }  
        });  
    })(jQuery);

OK, 插件完成, 在使用的时候要包含这个文件和jquery文件, 然后通过以下代码就可以调用了

    $('#ddd').money_type();// 默认保留两位小数

 

jquery plugin两个基本结构框架(带参/不带参)

不带参数

 //You need an anonymous function to wrap around your function to avoid conflict
(function($){ 
    //Attach this new method to jQuery
    $.fn.extend({ 

        //This is where you write your plugin's name
        pluginname: function() {

            //Iterate over the current set of matched elements
            return this.each(function() {

                //code to be inserted here

            });
        }
    });

//pass jQuery to the function, 
//So that we will able to use any valid Javascript variable name 
//to replace "$" SIGN. But, we'll stick to $ (I like dollar sign: ) )       
})(jQuery);

带参数

(function($){ 
  $.fn.extend({          
      //pass the options variable to the function
      pluginname: function(options) { 

          //Set the default values, use comma to separate the settings, example:
          var defaults = {
              padding: 20,
              mouseOverColor : '#000000',
              mouseOutColor : '#ffffff'
          }

          var options =  $.extend(defaults, options);

          return this.each(function() {
              var o = options;

              //code to be inserted here
              //you can access the value like this
              alert(o.padding);

          });
      }
  });