[翻译]25招改善你的jQuery - [2]
目录
2.使用备忘单
3.整合所有的脚本并缩减它们
4.使用Firebug出色的控制台日志工具
5.通过缓存最小化选择操作
6.最小化DOM操作
7.处理DOM插入操作时,将需要的内容包装在一个元素中
8.尽可能使用IDs而不是classes
9.给选择器提供上下文
10.正确使用方法链
11.学会正确使用效果
12.了解事件代理
13.利用classes存储状态
14.更好的方法是利用jQuery内置的data()方法存储状态
15.写你自己的选择器
16.精简你的HTML并在页面加载后修改它
17.为了速度和SEO方面的考虑,延迟加载内容
18.使用jQuery提供的工具函数
19.使用noConflict重命名jQuery对象
20.如何得知图片已加载完毕
21.总是使用最新版本
22.如何检查元素是否存在
23.给你的HTML属性增加JS类
24.返回'false'以防止默认行为
25. ready事件的简写16. 精简你的HTML并在页面加载后修改它
这个标题可能没有多大意思,但是这个技巧可能理顺你的代码、减小代码体积和页面的下载时间、有助优化你的搜索引擎。请看下面的例子:
<div class="fieldOuter"> <div class="inner"> <div class="field"> This is field number 1</div> </div> <div class="errorBar"> <div class="icon"> <img src="icon.png" alt="icon" /></div> <div class="message"> <span>This is an error message</span></div> </div> </div> <div class="fieldOuter"> <div class="inner"> <div class="field"> This is field number 2</div> </div> <div class="errorBar"> <div class="icon"> <img src="icon.png" alt="icon" /></div> <div class="message"> <span>This is an error message</span></div> </div> </div>
上面是一个HTML的具体例子,为了解释目的做了少量修改。我相信你也会认为这段代码相当的丑陋。如果类似代码很长的话,你最终会形成一个相当长且丑陋的页面。因此你可以像下面这样处理它:
<div class="field">This is field 1</div> <div class="field">This is field 2</div> <div class="field">This is field 3</div> <div class="field">This is field 4</div> <div class="field">This is field 5</div>
所有你要做的就是在页面加载完成之后通过jQuery的操作将丑陋的HTML添加回去:
$(document).ready(function() { $('.field').before('<div class="fieldOuter"><div class="inner">'); $('.field').after('</div><div class="errorBar"><div class="icon"> <img src="icon.png" alt="icon" /></div><div class="message"> <span>This is an error message</span></div></div></div>'); });
这样做并不总是可取的,在页面加载后的一瞬间你将会看到页面的闪动,但是在特定情况下你有很多重复的HTML内容,这时通过这个方法你可以显著的减小页面代码体积,减少无关且重复的标记能使你的SEO从中受益。
17. 为了速度和SEO方面的考虑,延迟加载内容
另外还有一个方法可以提升页面加载速度,理顺Spiders搜索的HTML内容,通过在页面加载之后使用AJAX请求晚加载其他内容,这样用户就可以马上开始浏览,让Spider看到你想要它们进行索引的内容。
我们已经在自己的网站上使用了这个技术。本页面上部的紫色按钮会弹出三个表格,方位与Google地图,这会使我们页面大小增加两倍。因此我们仅需要把这些HTML内容放入一个静态页面中,在页面加载完成之后通过load()函数加载它:
$('#forms').load('content/headerForms.html', function() { // Code here runs once the content has loaded // Put all your event handlers etc. here. });
我不会在页面上随处使用这个技巧。对此,你必须权衡考虑。你需要有额外的页面请求,而且页面上的部分内容不能立即呈现给用户,但是正确的使用这个技巧对优化会很有帮助。
18. 使用jQuery提供的工具函数
jQuery不仅仅有闪光的效果。jQuery作者也提供了一些相当实用的方法,这填补了JacaScript的一些缺陷。http://docs.jquery.com/Utilities
尤其,提供一些常见的数组函数的浏览器支持是一个补丁。jQuery提供了迭代、过滤、克隆、合并和从数组中去除重复项的方法。
其他常用的函数包括得到下拉框中的选择项。用传统的JavaScript方法,你就必须使用getElementById得到select元素,然后通过遍历它的子元素找出被选中的元素。而jQuery提供了相当容易使用的方法:
$('#selectList').val();
花时间浏览官方网站上的jQuery文档与一些不常用的方法上是很值得的。
19. 使用noConflict重命名jQuery对象
大多数JavaScript框架都使用$符号作为缩写,当在同一个页面使用多个JS框架时,页面很容易发生冲突。幸运的是有一个简单的方法。noConflict()函数交回$的控制权并允许你设置成自己的变量名:
var $j = jQuery.noConflict(); $j('#myDiv').hide();
20. 如何得知图片已加载完毕
这也一个没有很好文档说明的问题(至少在我查找时没看到),但是在创建照片库、旋转灯笼效果等方面,它是相当常见的需求。而这在jQuery中很容易实现。
所有你要做的就是在IMG上使用.load()方法,在其中添加一个回调函数。下面的例子改变了一个图片src的属性同事附加上一个简单的load函数:
$('#myImage').attr('src', 'image.jpg').load(function() { alert('Image Loaded'); });
你应该可以发现一旦图片加载完毕就会弹出一个alert。
21. 总是使用最新版本
jQuery仍在不断的更新,它的作者John Resig一直在寻找提高jQuery性能的方法。
jQuery当前的版本是1.2.6,John已经宣称他正在写一个新的选择器引擎Sizzle,这可能会显著的提高选择器性能(在Firefox中提升了4倍),因此我们应当保持最新版本。
【译注】这是去年年底写的文章,而目前最新版本是v.1.3.2。
22. 如何检查元素是否存在
你不必检查元素是否在页面上存在就可以使用它,因为如果没有在DOM中找到合适的元素,jQuery什么也不会做。可是当我们需要检查元素是否被选择了,或是有多少项被选择了,你可以使用length属性:
if ($('#myDiv).length) { // your code }
简单之极。
23. 给你的HTML属性增加JS类
我是从Karl Swedberg那学到这个技巧,过去学习jQuery时一直在看他的书。
他最近在我以前的文章留下了对该用法的评论,基本原则如下示之。
首先,在jQuery加载之后你可以使用方法将"JS"类添加到HTML标签中:
$('HTML').addClass('JS');
因为这仅仅发生在javascript有效的时候,如果用户打开JavaScript开关,那么你可以使用它给元素添加上CSS风格:
.JS #myDiv{display:none;}
因此,这意味着在JavaScript打开时我们可以隐藏内容,然后在需要时使用jQuery显示这些内容(比如在用户点击时收缩或展开内容),同时在关闭JavaScript(以及搜索Spiders)时会看到所有内容。我将在晚些时候使用这个技巧。
可以在这里看到他的所有文章。
24. 返回'false'以防止默认行为
这是很明显的,也可能不是。如果你有这样的习惯:
<a href="#" class="popup">Click me!</a>
然后添加上如下的事件处理:
$('popup').click(function(){ // Launch popup code });
你在长页面使用上述方法时,它可能可以正常工作。有些时候你会注意到在点击链接后锚点会跳转到页面上部。
所有你要做的就是阻止它的默认行为,或者实际上你可以把"return false;"添加到任何事件的默认行为上。像这样:
$('popup').click(function(){ // Launch popup code return false; });
25. ready事件的简写
一个小技巧但是通过使用$(document).ready()的简写,你可以少输入几个字符。取代:
$(document).ready(function (){ // your code });
你可以简写成:
$(function (){ // your code });
如果你喜欢这篇文章,请digg一下。
【译注】
翻译完毕!