天天看点

jQuery插件编写jQuery种类基本要点封装对象方法的插件全局函数的插件选择器的插件

1.封装对象方法的插件,这种插件是我们常用的插件,后面将会具体针对这种插件介绍,如:$("#div").parent();

2.封装全局函数的插件 如:jquery.ajax() 3.选择器插件 如:$("ul li:eq(0)")

1.所有的对象方法(第1种)都应该附加在jquery.fn=jquery.prototype,而所有的全局函数都应该附加在jquery上

2.this在插件内部,是通过选择器获取的jquery对象,而例如click(),内部指的的dom元素

3.应该返回一个jquery对象,以保证插件的可链式操作

1

2

3

4

5

6

7

8

9

10

11

<code>(</code><code>function</code><code>($){</code>

<code>   </code><code>$.fn.extent({</code>

<code>       </code><code>jname:</code><code>function</code><code>(opt){</code>

<code>         </code><code>var</code>

<code>option={uername:</code><code>"require"</code><code>};  </code><code>//默认的规则</code>

<code>         </code><code>option=$.extend(option,opt);</code>

<code>         </code><code>return</code>

<code>this</code><code>.each(){  </code><code>//会依次匹配元素,return 返回对象,保证可链式操作</code>

<code>        </code><code>这里写插件要做的操作</code>

<code>        </code><code>}</code>

<code>      </code><code>}&lt;br&gt;</code>

<code>  </code><code>})</code>

<code>})(jquery)</code>

以上是一个基本的对象插件的模板,这里讲解下$.extend(option,opt);如果option,opt有相同属性,opt会覆盖option的值

<code>option={uername:</code><code>"require"</code><code>,age:22};</code>

<code>  </code><code>opt={age:33};</code>

<code>  </code><code>$.extend(option,opt) </code><code>//这时返回的option={ uername:"require", age:33}</code>

jquery的extend方法还有一个重载原型:extend(boolean,dest,src1,src2,src3...)第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:

<code>var</code>

<code>result=$.extend(</code><code>true</code><code>, {},</code>

<code>{ name:</code><code>"john"</code><code>, location: {city:</code><code>"boston"</code><code>,county:</code><code>"usa"</code><code>} },</code>

<code>{ last:</code><code>"resig"</code><code>, location: {state:</code><code>"ma"</code><code>,county:</code><code>"china"</code><code>} } );</code>

我们可以看出src1中嵌套子对象location:{city:"boston"},src2中也嵌套子对象location:{state:"ma"},第一个深度拷贝参数为true,那么合并后的结果就是:

也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:

<code>result=$.extend(</code><code>false</code><code>, {},{ name:</code><code>"john"</code><code>, location:{city:</code><code>"boston"</code><code>,county:</code><code>"usa"</code><code>} },{ last:</code><code>"resig"</code><code>, location: {state:</code><code>"ma"</code><code>,county:</code><code>"china"</code><code>} });</code>

那么合并后的结果就是:result={name:"john",last:"resig",location:{state:"ma",county:"china"}}

<code> </code><code>$.extend({</code>

<code>  </code><code>func:</code><code>function</code><code>(){</code>

<code>  </code><code>return</code>

<code>;}</code>

<code> </code><code>})</code>

<code> </code><code>$.extend(jquery.expr[</code><code>":"</code><code>],{</code>

<code>    </code><code>between:</code><code>function</code><code>(a,i,m){ </code><code>//第1个参数,当前遍历的dom元素,第2个参数当前遍历的dom元素的索引值,从0开始,第3个参数用正则表达式match匹配出来的数组</code>

<code>        </code><code>return</code>

<code>    </code><code>}</code>