jquery高级编程的最佳实践详解

加载jQuery1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢。点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址。复制代码 代码如下:2.安全起见,最好还是提供一个本地备份以便在无法从远程CDN服务器获取jQuery时网站也能工作,如上面代码所示。详情见此。3.使用裸协议的URL(也就是说去掉http:或者https:),如上面代码展示的那样。4.如果可能,尽量将你的JavaScript和jQuery代码放到页面底部。详情移步这里,或者查看一个HTML5页面标准模板。5.该使用哪个版本?如果你想兼容IE678请表用2.x的版本针对极少数不用考虑兼容性的幸运儿,极力推荐使用最新版本的jQuery当从CDN服务器加载jQuery时,最好把版本写全(比如1.11.0而不是1.11或者直接写个1)千万莫重复加载6.如果你同时还使用了其他JS框架诸如Prototype, MooTools, Zepto云云,因为他们也使用了$符号,所以你就表再用美刀符号来进行jQuery 编码了,而请用'jQuery'代替。并且调用$.noConflict()保证不会有冲突出现。7.要检测浏览器对一些新特性是否支持,请用Modernizr。插播广告:论为毛不检测浏览器关于变量1.jQuery类型的变量最好加个$前缀。2.时常将jQuery选择器返回的内容存进变量以便重用复制代码 代码如下:var $products = $("div.products"); // 慢var $products = $(".products"); // 快3.使用驼峰命名关于选择器1.尽量ID选择器。其背后机理其实是调用原生的document.getElementById(),所以速度较其他选择器快。2.使用类选择器时表指定元素的类型。不信你看这个性能比较复制代码 代码如下:var $products = $("div.products"); // 慢var $products = $(".products"); // 快3.ID父亲容器下面再查找子元素请用.find()方法。这样做快的原因是通过id选择元素不会使用Sizzle引擎。详情看这里4.多级查找中,右边尽量指定得详细点而左边则尽量简单点。了解更多复制代码 代码如下:// 丑陋$("div.data .gonzalez");// 优化后$(".data td.gonzalez");5.避免冗余。详情或者查看性能比较复制代码 代码如下:$(".data table.attendees td.gonzalez");// 好的方式:去掉了中间的冗余$(".data td.gonzalez");6.指定选择的上下文。复制代码 代码如下:// 劣质的代码:因为需要遍历整个DOM来找到.class$('.class');// 高品代码:因为只需在指定容器范围内进行查找$('.class', '#class-container');7.表使用万能选择器。查看具体阐释复制代码 代码如下:$('div.container > *'); // 差$('div.container').children(); // 棒8.警惕隐式的万能选择器。省略的情况下其实使用的就是*号通配符。更多信息复制代码 代码如下:$('div.someclass :radio'); // 差$('div.someclass input:radio'); // 棒9.ID已经表示唯一了,背后使用的是document.getElementById(),所以表跟其他选择器混搭了。复制代码 代码如下:$('#outer #inner'); // 脏$('div#inner'); // 乱$('.outer-container #inner'); // 差$('#inner'); // 干净利落,后台只需调用document.getElementById()DOM操作相关1.操作任何元素前先将其从文档卸载,完了再贴回去。这事儿还能说细点复制代码 代码如下:var $myList = $("#list-container > ul").detach();//...一大堆对$myList的处理$myList.appendTo("#list-container");2.代码里将HTML组织好后再一次性贴到DOM中去。具体来说,性能比较// 这样不好var $myList = $("#list");for(var i = 0; i < 10000; i++){ $myList.append("
  • "+i+"");}// 这样好var $myList = $("#list");var list = "";for(var i = 0; i < 10000; i++){ list += "
  • "+i+"";}$myList.html(list);// 但这样更好var array = []; for(var i = 0; i < 10000; i++){ array[i] = "
  • "+i+""; }$myList.html(array.join(''));3.不要处理不存在的元素。详情复制代码 代码如下:// 无良的做法:jQuery后台要跑完三个函数后才会知道这个元素其实根本不存在$("#nosuchthing").slideUp();// 应该这样var $mySelection = $("#nosuchthing");if ($mySelection.length) { $mySelection.slideUp();}事件相关1.一个页面只写一个文档ready事件的处理程序。这样代码既清晰好调试,又容易跟踪代码的进程。2.表用匿名函数来做事件的回调。匿名函数不易调试维护测试和复用。或许你想较真,看看这里吧复制代码 代码如下:$("#myLink").on("click", function(){...}); // 表这样// 这样function myLinkClickHandler(){...}$("#myLink").on("click", myLinkClickHandler);3.处理文档ready事件的回调也表用匿名函数,匿名函数不易调试维护测试和复用:(复制代码 代码如下:$(function(){ ... }); // 糟糕的做法:无法利用此函数也无法为其写测试用例// 好的做法$(initPage); // 抑或 $(document).ready(initPage);function initPage(){ // 这里你可以进行程序的初始化了}4.进一步,最好也将ready事件的处理程序放到外部文件中引入到页面,而页面中内嵌的代码只需调用即可。复制代码 代码如下:5.千万表写内联到HTML的JS代码,这是调试的梦魇!应该总是用jQuery来绑定事件自带程序,这样也方便随时动态地取消绑定。复制代码 代码如下:my link $("#myLink").on("click", myEventHandler); // GOOD6.如果可能尽量在绑定事件处理程序时使用一个命名空间,这样可以方便地取消绑定而不会影响其他绑定。复制代码 代码如下:$("#myLink").on("click.mySpecialClick", myEventHandler); // 不错// 之后,让我们优雅地解除绑定$("#myLink").unbind("click.mySpecialClick");异步操作1.直接用$.ajax()而表去用.getJson() 或 .get(),因为jQuery内部还是将其转为前者2.表对HTTPS站点使用HTTP去发起请求,最好干脆就表指定(将HTTP或者HTTPS从你的URL中移除)3.表在链接里面嵌参数,请使用专门的参数设置来传递复制代码 代码如下:// 不易阅读的代码...$.ajax({ url: "something.php?param1=test1¶m2=test2", ....});// 更易阅读...$.ajax({ url: "something.php", data: { param1: test1, param2: test2 }});4.尽量指明数据类型以便你自己清楚要处理什么样的数据(见下方会提到的Ajax模板)5.对于异步动态加载的内容,最好使用代理来绑定事件处理程序。这样的好处是对于之后动态加载的元素事件同样有效。你或许想了解更多复制代码 代码如下:$("#parent-container").on("click", "a", delegatedClickHandlerForAjax);6.使用Promise模式。更多例子复制代码 代码如下:$.ajax({ ... }).then(successHandler, failureHandler);// 抑或var jqxhr = $.ajax({ ... });jqxhr.done(successHandler);jqxhr.fail(failureHandler);7.标准的Ajax模板一分。追寻根源复制代码 代码如下:var jqxhr = $.ajax({ url: url, type: "GET", // 默认为GET,你可以根据需要更改 cache: true, // 默认为true,但对于script,jsonp类型为false,可以自行设置 data: {}, // 将请求参数放这里. dataType: "json", // 指定想要的数据类型 jsonp: "callback", // 指定回调处理JSONP类型的请求 statusCode: { // 如果你想处理各状态的错误的话 404: handler404, 500: handler500 }});jqxhr.done(successHandler);jqxhr.fail(failureHandler);动画与特效1.保持一个始终如一风格统一的动画实现2.紧遵用户体验,表滥用动画特效使用简洁的显示隐藏,状态切换,滑入滑出等效果来展示元素使用预设值来设置动画的速度'fast','slow',或者400(中等速度)插件相关1.始终选择一个有良好支持,完善文档,全面测试过并且社区活跃的插件2.注意所用插件与当前使用的jQuery版本是否兼容3.一些常用功能应该写成jQuery插件。一分jQuery插件的编写模板链式句法1.除了用变量将jQuery选择器返回的结果保存,还可以利用好链式调用。复制代码 代码如下:$("#myDiv").addClass("error").show();2.当链式调用多达3次以上或代码因绑定回调略显复杂时,使用换行和适当的缩进来提高代码的可读性。复制代码 代码如下:$("#myLink") .addClass("bold") .on("click", myClickHandler) .on("mouseover", myMouseOverHandler) .show();3.对于特别长的调用最好还是用变量保存下中间结果来简化代码。其他1.使用对象字面量来传递参数复制代码 代码如下:$myLink.attr("href", "#").attr("title", "my link").attr("rel", "external"); // 糟糕:调用了三次attr// 不错,只调用了一次attr$myLink.attr({ href: "#", title: "my link", rel: "external"});2.表将CSS与jQuery杂揉复制代码 代码如下:$("#mydiv").css({'color':red, 'font-weight':'bold'}); // 不好.error {/* 不错 */ color: red; font-weight: bold;}$("#mydiv").addClass("error"); 3.时刻关注官方Changelog,表使用摒弃了的方法。4.适时地使用原生JavaScript。复制代码 代码如下:$("#myId"); // 多少还是会逊色于...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值