关键词:
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:)
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()保证不会有冲突出现。
7、要检测浏览器对一些新特性是否支持,请用Modernizr。
关于变量
1、jQuery类型的变量最好加个$前缀。
2、时常将jQuery选择器返回的内容存进变量以便重用
var $myDiv = $("#myDiv");
$myDiv.click(function()...);
3、使用 camel case命名
关于选择器
1.尽量ID选择器。实际运用的是js的document.getElementById(),所以速度较其他选择器快。
2.使用类选择器时表指定元素的类型。请看性能比较
var $products = $("div.products"); // 慢
var $products = $(".products"); // 快
3.ID父亲容器下面查找子元素请用.find()方法。这样做快的原因是通过id选择元素不会使用Sizzle引擎。详情看这里
// 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");
4.多级查找中,右边尽量指定得详细点而左边则尽量简单点。了解更多
// 丑陋
$("div.data .gonzalez");
// 优化后
$(".data td.gonzalez");
$(".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();
//...a lot of complicated things on $myList
$myList.appendTo("#list-container");
2、使用连接字符串或数组join(),然后再append()。请看
性能比较: http://jsperf.com/jquery-append-vs-string-concat
// 不好
var $myList = $("#list");
for(var i = 0; i < 10000; i++)
$myList.append("<li>"+i+"</li>");
// GOOD
var $myList = $("#list");
var list = "";
for(var i = 0; i < 10000; i++)
list += "<li>"+i+"</li>";
$myList.html(list);
// EVEN FASTER
var array = [];
for(var i = 0; i < 10000; i++)
array[i] = "<li>"+i+"</li>";
$myList.html(array.join(‘‘));
3、不要用缺失的元素,具体请看
// 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();
事件
1.一个页面只写一个文档ready事件的处理程序。这样代码既清晰好调试,又容易跟踪代码的进程。
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
6.如果可能尽量在绑定事件处理程序时使用一个命名空间,这样可以方便地取消绑定而不会影响其他绑定。
$("#myLink").on("click.mySpecialClick", myEventHandler); // 不错
// 之后,让我们优雅地解除绑定
$("#myLink").unbind("click.mySpecialClick");
7.当选择某个元素的子元素的时候,尽量在后面选择,不要在前面选择其中选择。如下:
$("#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.
Ajax异步操作
1.不要用.getJson() 或 .get(),直接用直接用$.ajax() ,因为jQuery内部还是将前者转化为$.ajax()
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"); // 多少还是会逊色于...
document.getElementById("myId");
jQuery 插件模板 - 最佳实践、约定、性能和内存影响
】jQuery插件模板-最佳实践、约定、性能和内存影响【英文标题】:jQueryplugintemplate-bestpractice,convention,performanceandmemoryimpact【发布时间】:2011-08-2405:23:17【问题描述】:我已经开始编写一些jQuery插件,并认为使用jQuery插件模板设置... 查看详情
jQuery 优化/最佳实践
】jQuery优化/最佳实践【英文标题】:jQueryOptimization/BestPractices【发布时间】:2011-03-1422:18:36【问题描述】:好的,给牛仔装上鞍,因为这将是一个很长的时间。我整个上午都在浏览我的一些旧代码,我想知道最佳实践和优化。为... 查看详情
用于 jQuery 选择器的 CSS 类命名的最佳实践
】用于jQuery选择器的CSS类命名的最佳实践【英文标题】:BestpracticeforCSSclassnamingforusewithjQueryselectors【发布时间】:2011-08-0616:00:23【问题描述】:在构建重Javascript的Web应用程序时,命名CSS类以保持Javascript代码和CSS样式表整洁以及U... 查看详情
循环定时 jquery 函数的最佳实践是啥
】循环定时jquery函数的最佳实践是啥【英文标题】:Whatareyourbestpracticesforloopingtimedjqueryfunction循环定时jquery函数的最佳实践是什么【发布时间】:2013-11-2213:55:26【问题描述】:当我使用jQuery进行循环时,我真的很困惑如何传递值... 查看详情
使用 jQuery 解析远程内容的最佳实践是啥?
】使用jQuery解析远程内容的最佳实践是啥?【英文标题】:WhatisthebestpracticeforparsingremotecontentwithjQuery?使用jQuery解析远程内容的最佳实践是什么?【发布时间】:2010-11-0507:31:41【问题描述】:在调用jQueryajax来检索整个XHTML文档之... 查看详情
jQuery:填充下拉列表的最佳实践?
】jQuery:填充下拉列表的最佳实践?【英文标题】:jQuery:Bestpracticetopopulatedropdown?【发布时间】:2010-10-2308:10:33【问题描述】:我一直看到的示例似乎不是最理想的,因为它涉及连接字符串,这似乎不是jQuery。它通常看起来像这... 查看详情
jQuery:取消设置/删除函数事件的最佳实践?
】jQuery:取消设置/删除函数事件的最佳实践?【英文标题】:jQuery:bestpracticeforunsetting/removingfunctionevents?【发布时间】:2011-12-1900:10:36【问题描述】:我正在使用jQuery插件CloudZoom,并且我已经更改了初始化,以便在用户单击“放... 查看详情
避免污染 jQuery 命名空间的最佳插件开发实践?
】避免污染jQuery命名空间的最佳插件开发实践?【英文标题】:BestplugindevelopmentpracticestoavoidpollutingjQuerynamespace?【发布时间】:2010-12-2202:02:32【问题描述】:我创建了一个jQuery插件,允许用户与树进行交互(创建、更新、删除节... 查看详情
JQuery 命名空间的最佳实践 + 通用实用程序函数
】JQuery命名空间的最佳实践+通用实用程序函数【英文标题】:BestpracticesforJQuerynamespaces+generalpurposeutilityfunctions【发布时间】:2011-05-3109:46:47【问题描述】:目前有哪些“经验法则”,用于实施JQuery命名空间以托管通用实用程序... 查看详情
有哪些 C++ 标准库使用最佳实践? [关闭]
...:02【问题描述】:我正在学习C++,而我正在阅读的书(C++编程语言)说不要重新发明***,而是要依赖标准库。在C中,我经常最终创建一个链表,并且一遍又一遍地迭代链表(也许我做错了不确定),所以C++中可用的容器、字符... 查看详情
jquery系列-jquery最佳实践
参考【1】阮一峰 http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html 查看详情
JQuery 内容滑块 - 最佳实践?
】JQuery内容滑块-最佳实践?【英文标题】:JQuerycontentslider-bestpractice?【发布时间】:2013-04-0210:33:04【问题描述】:我想创建一个基本上是一个巨大的内容滑块的网站,在页面加载时你会看到div1(基本上是整个屏幕),然后你可... 查看详情
在应用程序中使用 jQuery 表单绑定代码的最佳实践
】在应用程序中使用jQuery表单绑定代码的最佳实践【英文标题】:BestpracticeswithjQueryformbindingcodeinanapplication【发布时间】:2010-09-0706:36:43【问题描述】:我们有一个应用程序,其中包含大量对服务器端代码的jQueryJSON调用。因此,... 查看详情
在 jQuery 中使用 BIND 或 ON 函数的最佳实践 [重复]
】在jQuery中使用BIND或ON函数的最佳实践[重复]【英文标题】:BestpracticeusingBINDorONfunctionsinjQuery[duplicate]【发布时间】:2013-04-1202:24:15【问题描述】:最近jQuery团队开始推荐使用on而不是bind将事件绑定到DOM。我想知道它们之间是否... 查看详情
什么是特征缩放(标准化)和 LabelEncode 和 OneHotEncode 数据的最佳实践
】什么是特征缩放(标准化)和LabelEncode和OneHotEncode数据的最佳实践【英文标题】:whatisbestpracticeforfeaturescaling(Standardization)andLabelEncodeandOneHotEncodedata【发布时间】:2017-05-2105:48:11【问题描述】:这里我们有训练数据(x_train)和测试... 查看详情
链接到 Microsoft 编码标准/最佳实践文档?
】链接到Microsoft编码标准/最佳实践文档?【英文标题】:LinktoMicrosoftcodingstandard/bestpracticesdocumentation?【发布时间】:2010-11-2415:04:00【问题描述】:任何人都可以发布指向Microsoft开发最佳实践和指南的链接吗?我为此搜索了高低... 查看详情
在 html/css 中显示图像的标准兼容和/或最佳实践方式 [重复]
】在html/css中显示图像的标准兼容和/或最佳实践方式[重复]【英文标题】:Standardcompliantand/orbestpracticewaytodisplayanimageinhtml/css[duplicate]【发布时间】:2013-08-0610:56:40【问题描述】:描绘图像的最佳做法和既定方式是什么?我假设它... 查看详情
您对一组编码标准或最佳实践有啥好的建议/链接可以遵循吗?
...】:2009-02-2009:03:35【问题描述】:对于我们这些已经足够编程的人,我确信我们遇到了许多不同风格的编码标准,您可以在编程时使用这些标准 查看详情