分享14个jQuery插件开发人员易犯的错误

随着越来越多的开发人员开始开发jQuery插件,所以我们随时都有可能遇到很烂的插件开发“成果”。没有在线演示,没有文档,或者插件没有遵循最佳编码实 践。但是对于阅读这篇文章的朋友来说,你很幸运,因为这里我们将介绍14个jQuery插件开发中最容易犯的错误。希望大家会觉得有帮助!

随着jQuery的广泛使用,每天都出现很多新的插件 ,但是问题在于很多插件真不怎么样。

以前我们介绍过10个帮助你创建超棒jQuery插件的小技巧,在今天这篇文章中,我们将专注于jQuery插件的最佳开发实践,希望对于大家有帮助,如果你喜欢我们的文章,请给我们留言,谢谢!

错误一:不是在开发一个jQuery插件

总的来说,这里有很多大家接受的jQuery开发的模式。 如果你没有遵从这些设计模式,你开发的插件有可能很“垃圾“。看看如下最常用的模式:

 

(function($, window, undefined){
$.fn.myPlugin = function(opts) {
   var defaults = {
      // 设置你的选项缺省值
   }

  // 使用用户的选项缺省值来扩展缺省选项
  var options = $.extend(defaults, opts || {});

   return this.each(function(){ // jQuery链式操作
     // 插件的相关内容
   });
})(jQuery, window);

首先呢,我们创建了一个自调用的匿名方法来将我们插件中的参数和外部全局参数隔离开。我们传递$,window,和undefined三个变量参数。这些变 量和自调用的方法将和jQuery和window一起调用。对于undefined来说没有传递任何值,因此如果我们决定在插件中使用undefined 关键字的话,其实”undefined“并没有被定义。

 

使用这种方法可以有效的保证外部脚本被隔离而无法给undefined变量赋值,例如,将无法赋值undefined为true。

$被作为jQuery来传递;我们使用这种方法来保证在匿名方法的外部,$仍旧可以参考为其它内容,例如,prototype。

传递变量给全局性访问的window对象能允许更多经过压缩最小化(minification)处理的代码(当然,压缩是应该做的)

下 一步,我们将使用jQuery插件的模式, $.fn.PluginName。这用来登记你的插件使得其能被应用到 $(selector).method()格式中。简单使用new来扩展jQuery的prototype。如果你想创建一个jQuery的方法的话,只 需要直接添加如下代码:

 

$.PluginName = function(options){
   // 扩展选项,执行插件功能
}

这种类型的插件不可以执行链式操作,因为方法在jQuery对象中定义为属性,不能返回jQuery对象,例如如下代码:

 

$.splitInHalf = function(stringToSplit){
   var length = stringToSplit.length;
   var stringArray = stringToSplit.split(stringToSplit[Math.floor(length/2)]);
   return stringArray;
}

这个我们返回了一个字符串数组。直接返回array比较合理,因为这有可能是用户需要的返回类型(当然如果需要的话,直接使用jQuery对象来封装也很容易)。对比以上代码,我们看看如下代码:

$.getOddEls = function(jQcollection){ //
   return jQcollection.filter(function(index){
      var i = index+1;
      return (index % 2 != 0);
   });
}

在这个例子中,我们得到奇数数值,用户可能需要jQuery对象返回$.getOddEls;因此我们返回了filter方法,这个方法通过传递的方法返回了jQuery的collection定义。一个比较好的原则是封转返回的元素到一个jQuery方法中,特别是如果用户希望它可以进行链式操作;如果你返回数组,字符串,数据,方法或者其它类型,则不需要封装。

错误二:不书写文档或者不正确的书写文档来注释你的代码

无可厚非,对于发布代码来说最重要的是书写很好的文档。这是帮助你的使用者更好的了解代码功能及其能够实现功能的而一个很好的方式。用户可不愿意花大量时间研究你的代码输入输出。

文档书写没有什么强制的规则,理论来说你给的文档越多,肯定越好。

这个过程包括了代码内部注释说明及其外部的使用API文档或者应用演示。

错误三:没有提供足够的灵活性和自定义

最受欢迎的插件提供了对于参数(即用户使用的插件选项)完整的访问。他们可以提供很多不同的配置,这样可以应用到不同的场景中。例如,我们这里看看一个简单幻灯插件。可以控制的选项包括了速度,类型和动画的延迟。

比较好的实践是提供用户访问class或者ID名称。更好的话,你可能想调用幻灯过渡后的callback方法,或者是幻灯恢复到最初的状态的callback。

你需要考虑所有插件的可能使用场景和需求。

这里我们在看看另外一个例子:一个调用API的插件应该提供对于返回对象的访问。看看如下这个例子:

$.fn.getFlickr = function(opts) {
   return this.each(function(){ // jQuery chainability
      var defaults = { // setting your default options
         cb : function(data){},
         flickrUrl : // some default value for an API call
      }
       // extend the options from defaults with user's options
       var options = $.extend(defaults, opts || {});

       // call the async function and then call the callback
       // passing in the api object that was returned
       $.ajax(flickrUrl, function(dataReturned){
         options.cb.call(this, dataReturned);
      });
   });
}

这个插件允许我们执行如下代码行:

$(selector).getFlickr(function(fdata){ // flickr data is in the fdata object });

另外一个执行类似公开化的方法是提供一个”hooks"作为选项。在jQuery1.7.1及其以上版本中,我们可以在插件调用后使 用.on(eventName, function(){})方法以便分开自己独立的方法行为。例如,使用上面的插件,我们可以修改代码如下:

$.fn.getFlickr = function(opts) {
   return this.each(function(i,el){
      var $this = el;
      var defaults = { // setting your default options
         flickrUrl : "http://someurl.com" // some default value for an API call
      }
       var options = $.extend(defaults, opts || {});

       // call the async function and then call the callback
       // passing in the api object that was returned
       $.ajax(flickrUrl, function(dataReturned){
         // do some stuff
         $this.trigger("callback", dataReturned);
      }).error(function(){
            $this.trigger("error", dataReturned);
         });
   });
}

这样允许我们调用getFilckr插件并且链式其它行为的处理。

$(selector).getFlickr(opts).on("callback", function(data){ // do stuff }).on("error", function(){ // handle an error });

你可以看到提供这种灵活方式是绝对重要的,插件拥复杂的操作越多,那么控制就会越复杂。

错误四:要求太多的配置

上面的错误三我们介绍了越复杂的插件,要求控制就越复杂。一个很大的错误在于,插件创建了太多的选项。例如,对于UI插件来说比较理想的方式是不设置缺省的选项。

$(selector).myPlugin();

 当然,有时候这不太现实(例如,插件中用户需要指定RSS Feed来源)。在这里例子中,你应该尽量为用户设置初始的选项。

例如你开发一个需要从Tweet取得内容的插件。你可以要求用户输入一个用户名,如下:

$(selector).fetchTweets("gbin1"); 

 你可以提供缺省的展示方法,例如,feed个数,显示在<p>标签中。大多数的开发人员都希望是这样的。

错误五:将外部的CSS和行内的CSS混淆

如 果你处理UI的话,不可避免的需要在你的插件中包含CSS文件。一般来说,这是一个可接受的解决方式。多数的插件都带有图片和CSS。但是不要忘了错误 二,文档需要包含如何使用这些CSS和图片的内容。开发人员可没有时间来搜索你的代码来找到答案(况且,很多人可能并不会真正开发jQuery代码,特别 是在国内)。

无论如何,我们都需要保证插件能正常工作。

对于插件来说,最好的方式是使用基于Class/ID的CSS样式或者行内注入CSS(使用插件选项)。行内CSS会覆盖外部CSS,但是混合使用俩者会非常不舒服。开发人员可能会花一定时间来搞清楚为什么代码中的样式不好使。所以最好你自己决策如何处理这些问题。

作为一个规则来说,行内的CSS非常不好 -  除非它影响非常小,不会干扰外部的CSS样式定义。

错误六:没有提供任何在线演示

这绝对是很恶心的一件事,开发人员必须自己动手才能看到效果,往往发现不是自己期望的那样。其实作为插件开发来说,添加一些在线演示还是很简单的,如下是一些不错的演示模板:

A good template for examples:

A “hello world” example – usually the plugin call with the minimum configuration/options passed, and it’s accompanying html/css

A few more involved examples – usually with examples of full functionality of multiple options

An integration example – if someone might use another plugin with your plugin, here is where you can show how to do that. (This gets you bonus points in the open-source development world, too. Kudos.)

错误七:代码没有匹配正确的jQuery版本

jQuery 和其它的代码类库类似,也有不同的版本。大多数的方法即使被遗弃也会被保留。但是新的方法会被添加。一个非常典型的例子是.on方法。它是jQuery新 版本中事件处理的一个全新的all-in-one解决方案。如果你书写使用到.on()方法的插件的话,需要使用到jQuery1.6或者以上版本。

一 个比较好的习惯是在你的文档中说明,你要求的jQuery版本,例如,1.7或者以上,作为我个人来说,在使用jQuery插件中也有类似不愉快的体验。 所以为了让更多的开发人员喜欢你的插件,一定要很好的说明。并且提供一个不再支持的旧版本下载也是一个相当不错的方法。

问题。

鼓励大家使用新的jQuery类库,但是不要让你的插件失效的太频繁了!提供一个不再支持的旧版本下载也是一个相当不错的选择。

错误八:找不到修正说明

除了保证你的jQuery版本的支持和兼容性,你还需要版本控制(例如,Github)。 如果你希望你开发的jQuery插件最后能够公开发布的话,你最好保存在Github中。使用版本控制有诸多的好处,具体就不在这篇文章中详细说明。但是 最重要的在于允许使用你的插件的开发人员看到相关的修改,提升或者兼容性的bug修正。这同时能够帮助你扩展/提高你的插件的用户体验。

错误九:开发的插件并没有人使用

这里我们得提一下,很多插件都很简单,或者说是肤浅,没有任何理由来称之为插件。这个世界不再需要幻灯插件了!

我们不需要闭门造车,很多已经存在的不错的插件,为什么还需要再去开发呢?

这个世界不再需要幻灯插件了。

错误十:没有提供一个压缩最小化版本

这个问题非常简单明显,如果是一个可供使用的插件,意味着是ready to use的代码,试问如何在产品环境中使用一个超大的js代码呢?

请参考错误十三来寻找自动处理解决方案。

错误十一:把代码写的太“聪明”

当你书写一个插件的时候,你是不是打算给别人使用的呢?如果你书写的代码晦涩难懂,大家如何能够debug?

如果你给变量起名gbin1,x,y,z,你绝对犯了一个大错。

错误十二:不需要使用jQuery

我 们都很喜欢使用jQuery,但是要知道它是一个类库,肯定会有些性能代价的。一般来说,你不会太在意jQuery选择器的性能。当然jQuery是被很 好的优化过的。 但是如果你只需要一些简单的DOM查询的话,你可能可以考虑使用别的技术,例如,vanilla,Zepto。

不要为了jQuery而使用jQuery,如果你使用其它技术例如,vanilla javascript,你需要注意兼容性,你有可能需要书写一些polyfill来适应新API。

错误十三:没有自动化整个过程

Grunt是一个基于任务的javascript命令行编译工具。如果有兴趣可以看看这篇文章。

grunt init:jquery

运行这个命令,将会提示你一系列问题,例如,title,描述,版本,git repository,许可等。

Grunt功能不止于此。它可以帮助你自定义boilerplate代码,并且内建很多工具,例如,JSHint ,Qunit 还有 PhantomJS

定期使用Grunt做编译工作。

错误十四:没有做过测试

你是不是认真测试过你的代码?那你怎么保证代码正常工作?只靠刷新浏览器吗?还是考虑使用一些工具吧: QUnit, Jasmine, 或者 Mocha

如果测试jQuery插件对你来说比较新的话,可以考虑多留意一些测试工具和方法。

 

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁? 正常来说做好一个模块化,如果不需要再动,最好还是lock,防止不明白的工程师异动导致问题。如果复用布局设计时,因为有些器件和拓扑并不完全一致,那需要调整部分器件,被锁之后只能全选,无法修改。所以解开锁定后,就能正常编辑了。 阅读详情

相关推荐

CCS软件仿真插件移植避坑指南:从CCS5.5到7.4的完整流程

本文详细介绍了将CCS软件仿真插件从CCS5.5迁移至CCS7.4的完整流程与避坑指南。针对TMS320F28335等C2000系列芯片,重点解析了仿真核心文件、配置数据库、连接定义及驱动文件的移植步骤,并通过两个实战Demo验证了移植后仿真环境的可用性,帮助开发者在无硬件条件下继续高效进行算法验证与调试。

defi6farmer的博客 456

巧解jquery及其插件一些bug

<br />在开发傲游新浪微博插件中,使用jquery遇到一些问题,原因和解决方法如下。<br /> <br />1、thickbox的参数问题<br />在thickbox的例子中,以inline方式调用,形式如#TB_inline?height=300&width=300&inlineId=myOnPageContent。<br />但是发现这样调用不能设定弹出层的高度,调试到tb_parseQuery方法时,发现如上的整个串被整个传递进来,而parse方法是根据;或者&来分隔参数的,造成无法获得第一个

蒋宇捷的专栏 1988

PFC胶结模型实战:从线性到平行粘结的力学行为解析

本文深入解析了PFC中线性接触与平行粘结(pb模型)的核心差异与应用。平行粘结模型通过模拟胶结层的力学行为,能够有效传递拉力和抵抗弯矩,是模拟岩石、混凝土等胶结材料的关键。文章详细介绍了其变形与强度参数的设置、法向与切向行为的验证方法,并揭示了全量与增量力计算中易出现的“幽灵力”问题及其解决方案,为复杂模型的构建与调试提供了实用策略。

weixin_29230773的博客 1203

jquery插件介绍(一)

jQuery Autocomplete ModjQuery Autcomplete插件。能够限制下拉菜单显示的结果数。查看详细 标签:AutoComplete  jQuery   jQuery-Horizontal Accordion具有XBOX360 blade界面风格的水平方向Accordion。查看详细 标签:Accordion  jQuery   AutoComplete-JQueryjQ

最后一个BUG留给我 955

[医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey

本综述有两个独创之处,首先,与传统的调查方法直接将医学图像分割的文献划分为多个组,并对每个组详细介绍文献的方法相比,我们将目前流行的文献按照从粗到细的多层次结构进行分类。其次,本文重点研究了监督学习和弱监督学习方法,但未包括无监督方法,这种方法目前在医学图像领域并不流行。对于监督学习方法,我们从骨干网络的选择、网络块的设计和损失函数的改进三个方面对文献进行了分析。对于弱监督学习方法,我们分别根据数据增强,迁移学习和交互式分割研究文献。与已有的调查相比,本次调查的文献分类与以往有很大的不同,更便于读者了解相关

qq_38932073的博客 4万+

开关变换器小信号建模实战:从理论到环路设计

本文深入探讨了开关变换器小信号建模的实战技巧,从理论基础到环路设计全面解析。通过Buck和Boost变换器的具体案例,详细介绍了状态空间平均法、扰动法等关键建模技术,并分享环路补偿设计和实际调试中的宝贵经验。文章特别强调了小信号建模在电源设计中的重要性,为工程师提供了从理论到实践的完整解决方案。

weixin_29290259的博客 376

哈哈还有一个时间插件的小bug-----jquery-calendar.js

因为之前上一个的时间插件不好用,虽然把那小bug修复了可是秦哥还是觉得不好,我有事修了两天假,功能做完了但还没测试,所以把工作交接给了秦哥,于是秦哥就把那插件换掉了,换成了jquery-calendar.js  ,jquery的插件,,,可是周一刚来,编辑那边就来了问题了,功能上线了可是除了问题,时间插件在选择8号 和 9 号以后月数会自动减1.。。。。。。郁闷也就是当你选择8号以后显示日期为20

lingyanglian的专栏 1350

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 352

jQuery学习资料分享

jQuery学习资料分享 学习jQuery有一段时间了,收集了不少资料,这里把资料的链接分享给大家。另外推荐大家微博关注“开源中国”、“HTML5研究小组”、“百度技术沙龙”等,还有博客园的“梦想天空(山边小溪)”博客,我的很多资料都是从上面收集到的。 jQuery学习教程: (1)20个jQuery分页插件和教程,附带实例 (2)2011最有用最潮的jQuery特效教程 (3)如何

基咯咯 873

华为OD技术面真题 - JAVA开发 - 1

汇总华为OD技术面八股JAVA八股,高频技术真题并提供详细解答。

qq_45776114的博客 1200

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1327

水平滚动字幕的jquery插件和原生代码

水平滚动字幕的jquery插件和原生代码 滚动可以用标签来实现,网上有些文章说marquee只有IE支持,其他的浏览器不支持。开始我还信以为真,后来亲手是一把,才知道这种说法是错误的。其他浏览器(chrome,opera,safari,firefox等)都是支持marquee的(绝知此事要躬行啊)。既然所有浏览器都兼容不应该就没问题了,但是仔细发现marquee实现的滚动效果太挫了,一卡一卡

huang100qi的专栏 700

【TC397第23篇】深度解析TC397 EB MCAL开发系列:UART配置与POLL模式数据交互

通过本文,我们深度解析了TC397 EB MCAL开发系列中UART配置的POLL模式下的数据交互。从技术要点的介绍到实际案例的演示,希望读者能够更好地理解UART在POLL模式下的配置与应用。这不仅是对嵌入式系统开发的一次深刻探索,更是为项目提供了一种高效通信的解决方案。在未来的文章中,我们将继续深入研究嵌入式系统开发的各个方面,为广大开发者提供更多实用的技术知识。敬请期待,一同迎接嵌入式技术的新篇章!

一直在水些技术小文 470

25美丽大气的jQuery滑块插件推荐

JQuery的滑块插件在jQuery的用户界面,这是一个javascript脚本库的jQuery UI的插件。jQuery的滑块插件使您能够创建您的网站上的图像幻灯片。通过幻灯片,你可能已经看到照片由右至左或从左至右自动。那么你可以点击相应的图标(通常是一个箭头在屏幕的左边和右边两侧或按钮,这样一个小的白洞),图像将被重新显示,这种效应就是jquery的滑块插件,昨天给大家推荐了30个jquery...

weixin_30610755的博客 81

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jQuery中插件Flexigrid的用法

  之前在空闲的时间学习了jQuery中插件Flexigrid的用法,是采用将数据集转换成JSON格式字符串在Flexigrid中显示,结果遇到了一个头大的问题,Flexigrid在页面上只显示表头就是不显示数据,也没有其它的错误,json格式字符串也检查了N多遍,完全正确。折腾了两天,实在是没办法了,就换了个jQuery的1.3.2  版本,结果出人意料数据正常显示了,总算没白费功夫。   然...

weixin_34097242的博客 116

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jQuery学习之:Validation表单验证插件

最近由于公司决定使用AJAX + Struts2来重构项目,让我仔细研究一下这两个,然后集中给同事讲讲,让每个人都能够有所掌握,慢慢会用。于是,自己便开始学习…… 由于Struts2自己早就学过,因而不需要花多少时间。而AJAX之前没怎么用过。现在AJAX框架如此之多,选择哪一个呢?开始打算选择dojo,但是看了一点后,发现蛮复杂的。在之前有学过一点点jQuery,而网上也说j...

bagan8579的博客 169

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

对Web设计和开发人员有用的15个Chrome插件

导读:原文作者Brian在freelancefolder.com发表了一篇《15 Useful Google Chrome Extensions for Web Designers and Developers》,由伯乐在线敏捷翻译组编译,文章介绍了非常有用的15个Chrom

xjinza的专栏 785

Jquery.validate插件表单验证 (新样式)

&lt;!--done--&gt; &lt;!--end: header 头部 --&gt; &lt;!--done--&gt; 验证的效果如图:    学习Jquery表单验证插件自己琢磨,加上网上看了些攻略,基本算是学会使用这个插件了,下面分享一下我的心得; 我的开发环境是VS2008+jquery-1.4.2.min.js+jquery.val...

白强 207
上一篇: 常用的 HTML5 移动应用开发框架比较
下一篇: Python 编码时应该注意的几件事情
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值