




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
15个值得开发人员关注的jQuery开发技巧和心得很多jQuery开发人员可能不知道开发技巧,下面笔者总结了15个值得开发人员关注的jQuery开发技巧和心得,供大家学习和参考,希望对开发人员有所帮助: 1. 尽量使用最新版本的jQuery类库jQuery项目中使用了大量的创新。最好的方法来提高性能就是使用最新版本的jQuery。每一个新的版本都包含了优化的bug修复。对我们来说唯一要干的就是修改tag,何乐而不为呢?我们也可以使用免费的CDN服务,例如, Google来存放jQuery类库。 2. 使用简单的选择器直到最近,返回DOM元素的方式都是解析选择器字符串,javascript循环和内建的javascript API例如,getElementbyId(),getElementsByTagName(),getElementsByClassName()三种方式的整合使用。但是现代浏览器都开始支持querySelectorAll(),这个方法能够理解CSS查询器,而且能带来显著的性能提升。然而,我们应该避免使用复杂的选择器返回元素。更不用说很多用户使用老版本的浏览器,强迫jQuery去处理DOM树。这个方式非常慢。$(lidata-selected=true a) / Fancy, but slow $(li.selected a) / Better $(#elem) / Best 选择id是最快速的方式。如果你需要使用class名称, 那么你最好带上tag名称,这样会更快些。特别是在老浏览器和移动设备上。访问DOM是javascript应用最慢的方式 ,因此尽量少使用。使用变量去保存选择器,这样会使用cache来保存。性能更好。var buttons = $(#navigation a.button); / Some prefer prefixing their jQuery variables with $: var $buttons = $(#navigation a.button); 另外一个值得做的是jQuery给了你很多的额外便利选择器 ,例如,:visible,:hidden,:animated还有其它,这些不是合法的CSS3选择器。结果是你使用这些类库就不能有效地利用querySelectorAll()方法。为了弥补这个问题,你需要先选择元素,再过滤,如下:$(a.button:animated); / Does not use querySelectorAll() $(a.button).filter(:animated); / Uses it 3. 数组方式使用jQuery对象运行选择器的结果是一个jQuery对象。然而,jQuery类库让你感觉你正在使用一个定义了index和长度的数组。/ Selecting all the navigation buttons: var buttons = $(#navigation a.button); / We can loop though the collection: for(var i=;ibuttons.length;i+) console.log(buttonsi); / A DOM element, not a jQuery object / We can even slice it: var firstFour = buttons.slice(,4); 如果性能是你关注的,那么使用简单for或者while循环来处理,而不是$.each(),这样能使你的代码更快。检查长度也是一个检查你的collection是否含有元素的方式。if(buttons) / This is always true / Do something if(buttons.length) / True only if buttons contains elements / Do something 4. 选择器属性jQuery提供了一个属性,这个属性显示了用来做链式的选择器。$(#container li:first-child).selector / #container li:first-child $(#container li).filter(:first-child).selector / #container li.filter(:first-child) 虽然上面的例子针对同样的元素,选择器则完全不一样。第二个实际上是非法的,你不可以使用它来创建一个对象。只能用来显示filter方法是用来缩小collection。5. 创建一个空的jQuery对象创建一个新的jQuery空间能极大的减小开销。有时候,你可能需要创建一个空的对象,然后使用add()方法添加对象。var container = $(); container.add(another_element); 这也是quickEach方法的基础,你可以使用这种更快的方式而非each()。6. 选择一个随机元素上面我提到过,jQuery添加它自己的选择器过滤。除了类库,你可以添加自己的过滤器。只需要添加一个新的方法到$.expr:对象。一个非常棒的使用方式是Waldek Mastykarz的博客中提到的:创建一个用来返回随机元素的选择器。你可以修改下面代码:(function($) var random = ; $.expr:.random = function(a, i, m, r) if (i = ) random = Math.floor(Math.random() * r.length); return i = random; ; )(jQuery); / This is how you use it: $(li:random).addClass(glow); 7. 使用CSS HooksCSS hooks API是提供开发人员得到和设置特定的CSS数值的方法。使用它,你可以隐藏浏览器特定的执行并且使用一个统一的界面来存取特定的属性。$.cssHooksborderRadius = get: function(elem, computed, extra) / Depending on the browser, read the value of / -moz-border-radius, -webkit-border-radius or border-radius , set: function(elem, value) / Set the appropriate CSS3 property ; / Use it without worrying which property the browser actually understands: $(#rect).css(borderRadius,5); 更好的在于,人们已经创建了一个支持CSS hooks类库8. 使用自定义的缓动方法你可能听到过jQuery的缓动插件,它能够允许你给你的动画添加特效。唯一的缺点是你的访问者需要加载另外一个javascript文件。幸运的是,你可以简单的从插件拷贝效果,并且添加到jQuery.easing对象中,如下:$.easing.easeInOutQuad = function (x, t, b, c, d) if (t/=d/2) 1) return c/2*t*t + b; return -c/2 * (-t)*(t-2) - 1) + b; ; / To use it: $(#elem).animate(width:200,slow,easeInOutQuad); 9. $.proxy()使用callback方法的缺点之一是当执行类库中的方法后,context被设置到另外一个元素,例如: Close 执行下面代码:$(#panel).fadeIn(function() / this points to #panel $(#panel button).click(function() / this points to the button $(this).fadeOut(); ); ); 你将遇到问题,button会消失,不是panel。使用$.proxy方法,你可以这样书写代码:$(#panel).fadeIn(function() / Using $.proxy to bind this: $(#panel button).click($.proxy(function() / this points to #panel $(this).fadeOut(); ,this); ); 这样才正确的执行。$.proxy方法接受两个参数,你最初的方法,还有context。这里阅读更多$.proxy in the docs.。10. 判断页面是否太过复杂一个非常简单的道理,约复杂的页面,加载的速度越慢。你可以使用下面代码检查一下你的页面内容:console.log( $(*).length ); 以上代码返回的数值越小,网页加载速度越快。你可以考虑通过删除无用多余的元素来优化你的代码11. 将你的代码转化成jQuery插件如果你要花一定得时间去开发一段jQuery代码,那么你可以考虑将代码变成插件。这将能够帮助你重用代码,并且能够有效的帮助你组织代码。创建一个插件代码如下:(function($) $.fn.yourPluginName = function() / Your code goes here return this; ; )(jQuery); 你可以在这里阅读更多开发教程。12. 设置全局AJAX为缺省如果你开发ajax程序的话,你肯定需要有”加载中“之类的显示告知用户,ajax正在进行,我们可以使用如下代码统一管理,如下:/ ajaxSetup is useful for setting general defaults: $.ajaxSetup( url : /ajax/, dataType : json ); $.ajaxStart(function() showIndicator(); disableButtons(); ); $.ajaxComplete(function() hideIndicator(); enableButtons(); ); /* / Additional methods you can use: $.ajaxStop(); $.ajaxError(); $.ajaxSuccess(); $.ajaxSend(); */ 13. 在动画中使用delay()方法链式的动画效果是jQuery的强大之处。但是有一个忽略了的细节就是你可以在动画之间加上delays,如下:/ This is wrong: $(#elem).animate(width:200,function() setTimeout(function() $(#elem).animate(marginTop:100); ,2000); ); / Do it like this: $(#elem).animate(width:200).delay(2000).animate(marginTop:100); jQuery动画帮了我们大忙,否则我们得自己处理一堆的细节,设置timtout,处理属性值,跟踪动画变化等等。大家可以参考这个文章:jQuery animations14. 合理利用HTML5的Data属性HTML5的data属性可以帮助我们插入数据。特别合适前后端的数据交换。jQuery近来发布的data()方法,可以有效的利用HTML5的属性,来自动得到数据。下面是个例子: 为了存取数据你需要调用如下代码:$(#d1).data(role); / page $(#d1).data(lastValue); / 43 $(#d1).data(hidden); / true; $(#d1).data(options).name; / John; data()的jQuery文档:data() in the jQuery docs15. 本地存储和jQuery本地存储是一个超级简单的API。简单的添加你的数据到localStorage全局属性中:/ Check if key exists in the storage var value = $.jStorage.get(key); if(!value) / if not -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60794-1-110:2025 EN Optical fibre cables - Part 1-110: Generic specification - Basic optical cable test procedures - Mechanical tests methods - Kink,Method E10
- 【正版授权】 ISO/IEC 23090-32:2025 EN Information technology - Coded representation of immersive media - Part 32: Carriage of haptics data
- 【正版授权】 IEC 63522-54:2025 EN-FR Electrical relays - Tests and measurements - Part 54: Critical DC load current test
- GB/T 33014.2-2025道路车辆电气/电子部件对窄带辐射电磁能的抗扰性试验方法第2部分:电波暗室法
- 地面施工协议书
- 重庆窗帘布料知识培训课件
- 新解读《GB-T 30554-2014螺杆膨胀机 术语》
- 重庆教育培训基础知识课件
- 重庆市会计知识培训课件
- 重庆小儿推拿培训知识课件
- 小学五年级家长会-主题班会
- 10kV线路施工应急预案
- 《植物细胞》教学课件
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 医学教材 肠内营养相关性腹泻的预防处置课件
- 新人教版七年级上册英语全册课件(2024年新版教材)
- 2024-2030年中国纳米烧结银市场深度调查与发展战略规划分析研究报告
- 2024年安徽省体育彩票管理中心招聘23人(亳州地区招2人)历年(高频重点提升专题训练)共500题附带答案详解
- JT-T-1223-2018落水人员主动报警定位终端技术要求
- 国家质量监测四年级学生数学考试试题
- 2024年河南省成考(专升本)生理学护理学专业考试真题含解析
评论
0/150
提交评论