前端开发规范之jQuery编码规范
2021-07-07 18:04
标签:文件中 文件 列表 动画 xhr jquery 好的 完整 协议 在您的页面中优先使用CDN的方式,CDN方式的优点在这里,这里有比较流行的jQueryCDN列表清单(由于国内goolge限制问题,建议使用国内的CDN,例如百度的CDN)。 [html] view plaincopyprint?
window.jQuery || document.write(‘\/script>‘) 利用上面代码,预备一个相同版本的本地jQuery库,以备不时之需。 使用如上所示的协议独立性URL(去掉http:或https:,直接以//开头,例如‘//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js’) 如果可能,尽量保持所有的JS代码和jQuery在页面底部加载,更多信息或看个示例HTML5 Boilerplate。 使用哪个版本?如果你要兼容ie6、7、8,不要使用jQuery2.x版本 如果你的页面同时用到了类似于Prototype、MooTools、Zepto等这些同样使用$的类库,要使用jquery替代$,我们可以使用$.noConflict()把$的控制权还给其他库。 使用Modernizr实现高级的浏览器特征检测。 所有用于存储、缓存jQuery对象的变量应该以$前缀命名。 最好把使用选择器返回的jQuery对象缓存到变量里,以便重用。 [javascript] view plaincopyprint? var $myDiv = $("#myDiv"); $myDiv.click(function(){...}); 使用驼峰法命名变量。 尽可能的使用效率更高的ID选择器,因为仅仅使用“document.getElementById()”实现。 使用类(Class)选择器时,不要使用元素类型(Element Type),看看绩效差异。 [javascript] view plaincopyprint? var $products = $("div.products"); // SLOW var $products = $(".products"); // FAST 对于ID->child的方式,使用find的方式比嵌套选择器高效,因为第一个选择器不用使用Sizzle这个选择器引擎,更多信息。 [javascript] view plaincopyprint? // BAD, a nested query for Sizzle selector engine var $productIds = $("#products div.id"); // GOOD, #products is already selected by document.getElementById() so only div.id needs to go through Sizzle selector engine var $productIds = $("#products").find("div.id"); [javascript] view plaincopyprint? // Unoptimized $("div.data .gonzalez"); // Optimized $(".data td.gonzalez"); [javascript] view plaincopyprint? $(".data table.attendees td.gonzalez"); // Better: Drop the middle if possible. $(".data td.gonzalez"); [javascript] view plaincopyprint? // SLOWER because it has to traverse the whole DOM for .class $(‘.class‘); // FASTER because now it only looks under class-container. $(‘.class‘, ‘#class-container‘); [javascript] view plaincopyprint? $(‘div.container > *‘); // BAD $(‘div.container‘).children(); // BETTER [javascript] view plaincopyprint? $(‘div.someclass :radio‘); // BAD $(‘div.someclass input:radio‘); // GOOD [javascript] view plaincopyprint? $(‘#outer #inner‘); // BAD $(‘div#inner‘); // BAD $(‘.outer-container #inner‘); // BAD $(‘#inner‘); // GOOD, only calls document.getElementById() 处理现存元素之前,先剥离,处理之后再附加,更多信息。 [javascript] view plaincopyprint? var $myList = $("#list-container > ul").detach(); //...a lot of complicated things on $myList $myList.appendTo("#list-container"); [javascript] view plaincopyprint? // BAD var $myList = $("#list"); for(var i = 0; i
$myList.append(" } // GOOD var $myList = $("#list"); var list = ""; for(var i = 0; i
list += " } $myList.html(list); // EVEN FASTER var array = []; for(var i = 0; i
array[i] = " } $myList.html(array.join(‘‘)); [javascript] view plaincopyprint? // BAD: This runs three functions before it realizes there‘s nothing in the selection $("#nosuchthing").slideUp(); // GOOD var $mySelection = $("#nosuchthing"); if ($mySelection.length) { $mySelection.slideUp(); } 每个页面只使用一次document的ready事件,这样便于调试与行为流跟踪。 尽量不要使用匿名函数绑定事件,因为匿名函数不利于调试、维护、测试、重用,更多信息。 [javascript] view plaincopyprint? $("#myLink").on("click", function(){...}); // BAD // GOOD function myLinkClickHandler(){...} $("#myLink").on("click", myLLinkClickHandler); [javascript] view plaincopyprint? $(function(){ ... }); // BAD: You can never reuse or write a test for this function. // GOOD $(initPage); // or $(document).ready(initPage); function initPage(){ // Page load event where you can initialize values and call other initializers. } [javascript] view plaincopyprint? // Any global variable set-up that might be needed. $(document).ready(initPage); // or $(initPage); [javascript] view plaincopyprint? my link $("#myLink").on("click", myEventHandler); // GOOD [javascript] view plaincopyprint? $("#myLink").on("click.mySpecialClick", myEventHandler); // GOOD // Later on, it‘s easier to unbind just your click event $("#myLink").unbind("click.mySpecialClick"); [javascript] view plaincopyprint? $("#list a").on("click", myClickHandler); // BAD, you are attaching an event to all the links under the list. $("#list").on("click", "a", myClickHandler); // GOOD, only one event handler is attached to the parent. 避免使用.getJson()和.get(), 像它的名字昭示的那样使用$.ajax()。 不要在https站点上使用http请求,最好使用独立性URL(不包含http:和https:,直接以//开头)。 不要在请求URL上放置参数,使用data对象传递参数。 [javascript] view plaincopyprint? // Less readable... $.ajax({ url: "something.php?param1=test1?m2=test2", .... }); // More readable... $.ajax({ url: "something.php", data: { param1: test1, param2: test2 } }); [javascript] view plaincopyprint? $("#parent-container").on("click", "a", delegatedClickHandlerForAjax) [javascript] view plaincopyprint? $.ajax({ ... }).then(successHandler, failureHandler); // OR var jqxhr = $.ajax({ ... }); jqxhr.done(successHandler); jqxhr.fail(failureHandler); [javascript] view plaincopyprint? var jqxhr = $.ajax({ url: url, type: "GET", // default is GET but you can use other verbs based on your needs. cache: true, // default is true, but false for dataType ‘script‘ and ‘jsonp‘, so set it on need basis. data: {}, // add your request parameters in the data object. dataType: "json", // specify the dataType for future reference jsonp: "callback", // only specify this to match the name of callback parameter your API is expecting for JSONP requests. statusCode: { // if you want to handle specific error codes, use the status code mapping settings. 404: handler404, 500: handler500 } }); jqxhr.done(successHandler); jqxhr.fail(failureHandler); 采用克制和一致的方法去实现动画。 不要过度使用动画效果,除非是用户体验所需。尝试使用简单的show/hide,slideUp/slideDown等方法切换对象,尝试使用‘fast’,‘slow‘和‘medium’。 优先选用具有良好支持、测试、社区支持的插件。 检查该插件与您所用jQuery版本的兼容性。 任意可复用组件都应该形成插件,看看jQuery插件的样本代码。 将链式操作看成变量缓存和多选择器请求的替代方式。 [javascript] view plaincopyprint? $("#myDiv").addClass("error").show(); [javascript] view plaincopyprint? $("#myLink") .addClass("bold") .on("click", myClickHandler) .on("mouseover", myMouseOverHandler) .show(); 使用字面对象传递参数。 [javascript] view plaincopyprint? $myLink.attr("href", "#").attr("title", "my link").attr("rel", "external"); // BAD, 3 calls to attr() // GOOD, only 1 call to attr() $myLink.attr({ href: "#", title: "my link", rel: "external" }); [javascript] view plaincopyprint? $("#mydiv").css({‘color‘:red, ‘font-weight‘:‘bold‘}); // BAD .error { color: red; font-weight: bold; } /* GOOD */ $("#mydiv").addClass("error"); // GOOD [javascript] view plaincopyprint? $("#myId"); // is still little slower than... document.getElementById("myId"); 前端开发规范之jQuery编码规范 标签:文件中 文件 列表 动画 xhr jquery 好的 完整 协议 原文地址:http://www.cnblogs.com/hehuiself/p/7100263.html加载jQuery
对于新的应用来说,如果不存在兼容性问题,强烈建议使用最新版本
从CDN加载jQuery时,指定你需要加载版本的完整版本号(例如,使用1.11.0而不是1.11或者1)
不要加载多个jQuery版本
不要使用jquery-latest.jsjQuery变量
选择器
DOM操作
事件
Ajax
效果和动画
插件
链式操作
杂项