[Js/Jquery]jquery插件开发

摘要

上篇文章简单学习了js自调用方法。今天就趁热打铁,学一学怎么编写一个jquery插件。

JQuery

参考地址:http://www.cnblogs.com/playerlife/archive/2012/05/11/2495269.html

通过JQuery.fn增加一个新的函数来编写JQuery插件,也可以说是在Jquery对象上面扩展一个新的方法。

代码片段:

        jQuery.fn.myPluigin = function () {
            //code...
        };

似乎这样就可以了,但有个问题,也许你的扩展的方法会和jquery中的方法产生冲突,所以这时候最好用一个 自执行的函数将其包裹起来,并且将JQuery作为参数传进去。所以有了下面的代码:

    (function ($) {
        $.fn.myPluigin = function () {
            //code...
        };
    })(jQuery);

通过这种方式,由于闭包的关系,所以和其它地方的并不会产生冲突。

一个简单插件

获取页面上div的最大宽度

<script>
    (function ($) {
        $.fn.maxWidth = function () {
            var max = 0;
            //this 指向的是jquery对象
            this.each(function () {
                //this指向DOM元素,要取到这个dom元素,可以通过$(this)
                max = Math.max(max, $(this).width());
            });
            return max;
        };
    })(jQuery);
    var maxWidth = $("div").maxWidth();
    console.log(maxWidth);
</script>

链式

为了使用jquery中链式开发的特性,所以在封装插件的时候,需要返回这个元素供链条上的下一个使用。

    (function ($) {
        $.fn.Chain= function (type) {

            //this 指向的是jquery对象
            return this.each(function () {
                var $this = $(this);
                if (type && type == "width") {
                    $this.width($this.width());
                }

            });
        };
    })(jQuery);
    $("div").Chain("width").css("color", "red");    

因为该插件返回了this,所以你可以继续链式,比如 css()。如果你的插件如果不是返回一个简单值,你通常应该返回this。

默认值选项

在使用插件的过程中,经常可以看到插件有部分的默认值,我们只需传入需要替换的参数即可,就可以对插件进行配置。

    (function ($) {
        $.fn.myAlert = function (options) {
            var settings = {
                "location": "top",
                "background-color": "red"
            };
            console.log(‘default‘, settings);
            return this.each(function () {
                if (options) {
                    $.extend(settings, options);
                    console.log(‘extend‘, settings);
                };
            });
        };
    })(jQuery);
    $("div").myAlert({ "location": "center" });

结果

在这个例子中,使用插件后,默认的location被替换为center,而background-color保持原样。这样可以保证高度可配置醒,而不需要开发者定义所有可能的选项了。

命名空间

命名空间的重要性,可以保证你的插件不被其他插件重写,也能避免被页面上其它代码重写。

注意

在任何情况下都不压迫在一个插件中为jQuery.fn增加多个方法。

(function ($) {
    $.fn.method1 = function () {

    };
    $.fn.method2 = function () {

    };
    ..
    $.fn.methodn = function () {

    };
})(jQuery);

可以这样,将方法放在一个对象里面,然后根据不同的参数进行调用:

    (function ($) {
        var methods = {
            method1: function (options) { },
            method2: function () { },
        };
        $.fn.myMethod = function (method) {
            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            } else {
                //....
            }
        }
    })(jQuery);
时间: 2024-10-07 07:03:09

[Js/Jquery]jquery插件开发的相关文章

解决ECSHOP中transport.js和jquery的冲突

ecshop模板兼容jquery问题, 一直是困扰开发人员的棘手问题,主要原因是 transprot.js  文件中, 大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突.冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错. ecshop开发中

原生JS与jQuery操作DOM有什么异同点?

本文和大家分享的主要是原生JS与jQuery操作DOM相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 一.创建元素节点 1.1 原生 JS 创建元素节点 document.createElement("p"); 1.2 jQuery 创建元素节点 $('<p></p>');` 二.创建并添加文本节点 2.1 原生JS创建文本节点 document.createTextNode("Text Content"); 通常创建文

js引用jquery问题

jquery本身就是一个JavaScript函数库,所以可以直接在js文件中写jquery代码. 但需要注意:jquery的使用需要引用官方的jquery.js文件. 关键:独立的js文件不需要引用任何jquery.js文件,只需要在相应的html网页中引用jquery.js和.js文件,jquery文件引用必须在.js文件之前.如下图: html文件: <script src="js/jquery-1.12.4.js"></script> //引用jquery

移动端用js与jquery实时监听输入框值的改动

背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android和iOS都可以触发的keyDown和keyUp. 于是,百度出了新东西:oninput![需要配合propertychange,兼容 IE9 以下版本] 用法: JS: if(isIE) { document.getElementById("input").onpropertychange

HTML5 audio元素如何使用js与jquery控制其事件

前言: 每一次遇见问题想到的就是怎么解决?最好的方法还是查询网络媒体,更好的办法是让自己记忆,只有自己理解到了才真正是属于自己.要做一个订单提醒功能,没有使用audio相关的插件,虽然插件无数,还是喜欢自己瞎折腾.(来一些隐形的链接,据说有推广效果,本文原创官网地址:www.pushself.com) 听一个写博客的朋友说周末的博客阅读量明显下降,周末大好时光不出去泡妹子的肯定是有难言之隐的.先来重温一下audio标签的基本属性 定义和用法 <audio> 标签定义声音,比如音乐或其他音频流.

关于js和jquery的一些问题

很长时间没有写前台代码了,突然想用js写个文件上传共通,结果遇到了各种各样的问题. 现在把问题和解决的办法记录一下.(有些还没有找到具体的原因) 1,利用extend(bool,{},item1,item2-.)来深度拷贝对象,只是得到浅拷贝的结果. 测试语句: var aa = { bb:{ cc:"12" } } var dd = $.extend(true, {}, aa); var ee = $.extend(true, {}, aa); //var dd = JSON.par

Python之路【第十二篇】前端之js&amp;dome&amp;jQuery

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的. 1.存在方式 <!--导入javascript脚本方法--> <script type="text/javascript" src="t1.js "></script> <!--直接在html内部编写javasc

js+html+jquery 个人笔记

js+html+jquery 笔记 1.获取HTML对象 var obj = document.getElementById(elementId) 对象的值: obj.value() 2.获取jQuery对象 var obj = $("#elementId"); var obj = $(".classname"); var obj = $("input[name='select_name']:checked"); // input输入框 对象的值

JS及JQuery对Html内容编码,Html转义

/** JQuery Html Encoding.Decoding * 原理是利用JQuery自带的html()和text()函数可以转义Html字符 * 虚拟一个Div通过赋值和取值来得到想要的Html编码或者解码 */ <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> //Ht

jquery.cityselect.js基于jQuery+JSON的省市或自定义联动效果

一.插件介绍 最早做省市联动的时候都特别麻烦,后来在helloweba的一篇文章中看到这个插件,很不错的,后来就一直用了. 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. 二.插件作者及网址 作者:暂无(请作者看到后联系我[email protected],好标上你的大名)官方网址:无官方DEMO:无最新版本:日期201