经过长时间的积累,整理了一堆以帮助更多的人~
jQuery的加载
1、我们经常用CDN来加载网页,我之前的文章中也多次提及,点击查看使用CDN的好处,
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script>window.jQuery || document.write(‘<script src="js/jquery-2.1.1.min.js" type="text/javascript"><\/script>‘)</script>
2、最好在本地备份一个相同版本的代码,以防万一,不能链接远程服务。
3、使用裸协议的URL(去掉http:或者https:),如上面代码展示的那样,我在之前的文章中也提到过,加载CDN可以省掉http
4、如果可能,尽量将你的JavaScript和jQuery代码放到页面底部。
5.该使用哪个版本?
如果你想兼容IE678请不要用2.x的版本
针对极少数不用考虑兼容性问题的,极力推荐使用最新版本的jQuery
当从CDN服务器加载jQuery时,最好把版本写全(比如1.11.0而不是1.11或者直接写个1)
不要重复加载和多次加载
不要从jquery CDN中加载 jquery-latest.js
6、如果你同时还使用了其他JS框架诸如Prototype, MooTools, Zepto等等,这些框架中,有的也用了$符号,所以你就不要再用$来进行jQuery 编码了,而请用‘jQuery‘代替。并且调用$.noConflict()保证不会有冲突出现。
关于变量
1、jQuery类型的变量最好加个$前缀。
2、时常将jQuery选择器返回的内容存进变量以便重用
var $myDiv = $("#myDiv"); $myDiv.click(function(){...});
3、使用 camel case命名
4.指定选择的上下文。
// 劣质的代码:因为需要遍历整个DOM来找到.class $(‘.class‘); // 高品代码:因为只需在指定容器范围内进行查找 $(‘.class‘, ‘#class-container‘);
5. 避免使用万能选择器。
$(‘div.container > *‘); // 差 $(‘div.container‘).children(); // 棒
6.警惕隐式的万能选择器。省略的情况下其实使用的就是*号通配符。
$(‘div.someclass :radio‘); // 差 $(‘div.someclass input:radio‘); // 棒
7. ID已经表示唯一了,背后使用的是document.getElementById(),所以不要和其他选择器混淆了。
$(‘#outer #inner‘); // 脏 $(‘div#inner‘); // 乱 $(‘.outer-container #inner‘); // 差 $(‘#inner‘); // 干净利落,后台只需调用document.getElementById()
DOM操作
1.操作任何元素前先将其从文档卸载,然后再贴回去。
var $myList = $("#list-container > ul").detach(); //...a lot of complicated things on $myList $myList.appendTo("#list-container");
2.不要用匿名函数来做事件的回调。匿名函数不易调试维护测试和复用。或许你想较真,看看这里吧
$("#myLink").on("click", function(){...}); // 不要这样 // 这样 function myLinkClickHandler(){...} $("#myLink").on("click", myLinkClickHandler);
3.处理文档ready事件的回调也表用匿名函数,匿名函数不易调试维护测试和复用
$(function(){ ... }); // 糟糕的做法:无法利用此函数也无法为其写测试用例 // 好的做法 $(initPage); // 抑或 $(document).ready(initPage); function initPage(){ // 这里你可以进行程序的初始化了 }
4.进一步,最好也将ready事件的处理程序放到外部文件中引入到页面,而页面中内嵌的代码只需调用即可。
<script src="my-document-ready.js"></script> <script> // 初始化一些必要的全局变量 $(document).ready(initPage); // 抑或 $(initPage); </script>
5.千万不要写内联到html的JS代码,这是调试的噩梦!应该总是用jQuery来绑定事件自带程序,这样也方便随时动态地取消绑定。
<a id="myLink" href="#" onclick="myEventHandler();">my link</a> <!--不好 --> $("#myLink").on("click", myEventHandler); // GOOD $("#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);