hans.hu

夫天地者,万物之逆旅也;光阴者,百代之过客也。而浮生若梦,为欢几何?古人秉烛夜游,良有以也。况阳春召我以烟景,大块假我以文章。

[翻译]25招改善你的jQuery - [2]

原文地址:http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx

目录

  1. 从Google Code加载jQuery
  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一下。 

【译注】

翻译完毕!

posted on 2009-03-31 12:05  hans.hu  阅读(1912)  评论(3编辑  收藏  举报

导航