`
Teddy_MaLi
  • 浏览: 6745 次
  • 性别: Icon_minigender_1
  • 来自: 景德镇
最近访客 更多访客>>
社区版块
存档分类
最新评论

jQuery的十五个开发技巧和心得

阅读更多

在本篇文章中,将介绍十五个让你的jQuery更加有效的技巧,大部分是关于性能提升的,希望大家能够喜欢!

 

  • 尽量使用最新版本的jQuery类库

 

jQuery项目中使用大量的创新。最好提升性能的方法就是使用最新版本的jQuery。每一个新版本都包含了优化的Bug修复。对于我们来说唯一要干的就是修改Tag,何乐而不为呢?

我们也可以使用免费的CDN服务。例如,Google来存放jQuery类库。

<!-- Include a specific version of jQuery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<!-- Include the latest version in the 1.6 branch -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>

 

  • 使用简单的选择器

 

直到最近,返回DOM元素的方式都是解析选择器字符串。JavaScript循环和内建的JavaScript API,例如getElemenbyId()、getElementsByTagName()和getElementsByClassName()三种方式的整合使用。但是现代浏览器都开始支持querySelectorAll(),这个方法能够理解CSS查询器,而且能带来显著的性能提升。

然而,我们应该避免使用复杂的选择器来返回元素。更不用说很多用户使用老版本的浏览器,强迫jQuery去处理DOM树。这个方式非常慢。

$('li[data-selected="true"] a')	 // Fancy, but slow 
$('li.selected a')	              // Better 
$('#elem')	                      // Best

选择id是最快速的方式。如果你需要使用class名称,那么你最好带上Tag名称,这样会更快些。特别是在老浏览器和移动设备上。

访问DOM是JavaScript应用最慢的方式,因此尽量少使用。使用变量去保存选择器,这样会使用cache来保存。性能更好。

var buttons = $('#navigation a.button');  // Some prefer prefixing their jQuery variables with $: 
var $buttons = $('#navigation a.button');

另外一个值得做的是jQuery给了您很多的额外便利选择器。例如,:visible、:hidden和:animated还有其它的,但这些不是合法的CSS3选择器。结果是你使用这些类库就不能有效地利用querySelectorAll()方法。为了弥补这个问题,您需要先选择,在过滤,如下:

$('a.button:animated');	// Does not use querySelectorAll() 
$('a.button').filter(':animated');	// Uses it

  • 数组方式使用jQuery对象

运行选择器的结果是一个jQuery对象。然而,jQuery类库让您感觉您正在使用一个定义了index和长度的数组。

// Selecting all the navigation buttons:
var buttons = $('#navigation a.button');

// We can loop though the collection:
for(var i=0;i<buttons.length;i++){
	console.log(buttons[i]);	// A DOM element, not a jQuery object
}

// We can even slice it:
var firstFour = buttons.slice(0,4);

如果性能是您关注的,那么使用简单for或者while循环来处理,而不是$.each(),这样能是您的代码更快。

检查长度也是一个检查您的collection是否含有元素的方式。

if(buttons){	// This is always true
	// Do something
}

if(buttons.length){ // True only if buttons contains elements
	// Do something
}

  • 选择器属性

jQuery提供一个属性,这个属性显示了用来做链式的选择器。

$('#container li:first-child').selector    // #container li:first-child
$('#container li').filter(':first-child').selector    // #container li.filter(:first-child)

虽然上面的例子针对同样的元素,选择器则完全不一样。第二个实际上是非法的,您不可以使用它来创建一个对象。只能用来显示filter方法是来缩小collection。

创建一个空的jQuery对象

创建一个新的jQuery空间能极大的减小开销。有时候,您可以需要创建一个空的对象,然后使用add()方法来添加对象。

var container = $([]); 
container.add(another_element);

这也是quickEach方法的基础,您可以使用这种更快的方式而非each()。

选择一个随机元素

上面提到过,jQuery添加自己的选择器过滤。除了类库,您可以添加自己的过滤器。只需要添加一个新的方法到$.expr[':']对象。一个非常棒的使用方式是创建一个用来返回随机元素的选择器(Waldek Mastykarz的博客中提到的)。您可以修改下面代码:

(function($){
    var random = 0;

    $.expr[':'].random = function(a, i, m, r) {
        if (i == 0) {
            random = Math.floor(Math.random() * r.length);
        }
        return i == random;
    };

})(jQuery);

// This is how you use it:
$('li:random').addClass('glow');

  • 使用CSS Hooks

CSS hooks API是提供开发人员得到和设置特定的CSS数值的方法。使用它,您可以隐藏浏览器特定的执行并且使用一个统一的界面来存取特定的属性。

$.cssHooks['borderRadius'] = {
        get: function(elem, computed, extra){
            // Depending on the browser, read the value of
            // -moz-border-radius, -webkit-border-radius or border-radius
        },
        set: function(elem, value){
            // Set the appropriate CSS3 property
        }
};

// Use it without worrying which property the browser actually understands:
$('#rect').css('borderRadius',5);

更好的在于,人们已经创建一个支持CSS hooks类库

  • 使用自定义的删除方法

您可能听到过jQuery的删除插件,它能够允许您给您的动画添加特效。唯一的缺点是您的访问者需要加载另外一个JavaScript文件。幸运的是,您可以简单的从拷贝效果,并且添加到jQuery.easing对象中,如下:

$.easing.easeInOutQuad = function (x, t, b, c, d) {
	if ((t/=d/2) < 1) return c/2*t*t + b;
	return -c/2 * ((--t)*(t-2) - 1) + b;
};

// To use it:
$('#elem').animate({width:200},'slow','easeInOutQuad');

  • $.proxy()

使用callback方法的缺点之一是当执行类库中的方法后,context被设置到另外一个元素,例如:

<div id="panel" style="display:none">
	<button>Close</button>
</div>

执行下面代码:

$('#panel').fadeIn(function(){
	// this points to #panel
	$('#panel button').click(function(){
		// this points to the button
		$(this).fadeOut();
	});
});

您将遇到问题,button会消失,而不是panel。使用$.proxy方法,你可以这样书写代码:

$('#panel').fadeIn(function(){
	// Using $.proxy to bind this:

	$('#panel button').click($.proxy(function(){
		// this points to #panel
		$(this).fadeOut();
	},this));
});

这样才正确的执行。$.proxy方法接受两个参数,您最初的方法,还有context。这里阅读更多$.proxy in the docs

  • 判断页面是否太过复杂

一个非常简单的道理,约复杂的页面,加载的速度越慢。您可以使用下面代码检查一下您的页面内容:

console.log( $('*').length );

  以上代码返回的数值越小,页面加载速度越快。您可以考虑通过删除无用多余的元素来优化您的代码。

将您的代码转化成jQuery插件

如果您要花一定的时间去开发一段jQuery代码,那么您可以考虑将代码变成插件。这将能够帮助您重用代码,并且更够有效的帮组您组织代码。创建一个插件代码如下:

(function($){
	$.fn.yourPluginName = function(){
		// Your code goes here
		return this;
	};
})(jQuery);

  您可以在这里阅读更多开发教程。

  • 设置全局AJAX为缺省

如果您开发AJAX程序的话,您肯定需要有“加载中”之类的显示告诉用户。所以可以使用如下代码统一管理:

// ajaxSetup is useful for setting general defaults:
$.ajaxSetup({
    url            : '/ajax/',
    dataType    : 'json'
});

$.ajaxStart(function(){
    showIndicator();
    disableButtons();
});

$.ajaxComplete(function(){
    hideIndicator();
    enableButtons();
});

/*
    // Additional methods you can use:
    $.ajaxStop();
    $.ajaxError();
    $.ajaxSuccess();
    $.ajaxSend();
*/

  详细您可以查看这些文章:

  • 在动画中使用delay()方法

链式的动画效果是jQuery的强大之处。但是有一个忽略了的细节就是您可以在动画之间加上delays,如下:

// This is wrong:
$('#elem').animate({width:200},function(){
    setTimeout(function(){
        $('#elem').animate({marginTop:100});
    },2000);
});

// Do it like this:
$('#elem').animate({width:200}).delay(2000).animate({marginTop:100});

  jQuery动画帮了我们大忙,否则我们得自己处理一堆的细节,设置timeout,处理属性值,跟踪动画变化等等。大家可以参考这篇文章:jQuery animations

  • 合理利用HTML5的Data属性

HTML5的data属性可以帮助我们插入数据。特别适合前后端的数据交换。jQuery近来发布的data()方法,可以有效的利用HTML5的属性,来自动得到数据。如下:

<div id="d1" data-role="page" data-last-value="43" data-hidden="true"
    data-options='{"name":"John"}'>
</div>

   为了存取数据您需要调用如下代码:

$("#d1").data("role");			// "page"
$("#d1").data("lastValue");		// 43
$("#d1").data("hidden");		// true;
$("#d1").data("options").name;	// "John";

  如果您想看看实际的例子,请参考教程:使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果

data()的jQuery文档:data() in the jQuery docs

  • 本地存储和jQuery

本地存储是一个超级简单的API。简单的添加您的数据到localStorage全局属性中:

localStorage.someData = "This is going to be saved across page refreshes and browser restarts"

  单数对于旧的浏览器来说,这不是个好消息。因为他们不支持。但是可以使用jQuery的插件来提供支持一旦本地存储不能用的话。这种方式可以使得本地存储功能正常工作。

分享到:
评论

相关推荐

    15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】

    本文总结述了15个值得开发人员关注的jQuery开发技巧和心得。非常精辟实用!分享给大家供大家参考,具体如下: 在这篇文章中,我们将介绍15个让你的jQuery更加有效的技巧,大部分关于性能提升的,希望大家能够喜欢! ...

    jQuery开发技巧和心得_知识

    jQuery开发技巧和心得_知识

    15个值得开发人员关注的jQuery开发技巧和心得

    ### 15个值得开发人员关注的jQuery开发技巧和心得 #### 技巧1:使用特定版本的jQuery 在项目中包含jQuery时,确保你正在使用的版本与项目的其他部分兼容至关重要。为此,你可以指定要加载的确切版本。这样做可以...

    2021-2022年收藏的精品资料软件工程师15个值得开发者关注的jQuery开发技巧和心得.docx

    在本文档中,我们探讨了15个对软件工程师尤其是jQuery开发者至关重要的技巧和心得,旨在帮助他们提高代码效率和性能。以下是对这些技巧的详细解释: 1. **使用最新版本的jQuery库**:更新到最新版本的jQuery是提高...

    jquery零碎实例和学习心得

    这个压缩包中的"jquery零碎实例和学习心得"很可能是作者在深入学习jQuery过程中积累的一些实用技巧、代码片段以及个人的理解感悟。下面将详细探讨jQuery的核心概念和常见应用。 1. **DOM操作**:jQuery提供了简洁的...

    jquery心得

    ### jQuery 心得体会 #### 一、简介 jQuery 是一款快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等操作。它极大地提高了 Web 开发者的效率,使得复杂的操作变得简单易行。 ##...

    jquery开发入门整理(所需要了解的)

    ### 一些应该熟记于心的jQuery函数和技巧 - **链式调用**:通过链式调用可以连贯地进行一系列DOM操作。 - **事件委托**:使用`.on()`方法将事件绑定到父元素上,子元素触发事件时也会被处理,这样可以减少事件监听器...

    关于jQuery UI 使用心得及技巧

    1 jQuery UI 2 为我所用 2.1 Tabs 2.2 Accordion 2.2.1 使用基本的Accordion 2.2.2 实现打开多个标签 2.2.3 Accordion的嵌套 3 给插件应用主题——Theme Roller 3.1 更改配色 3.2 更改图标 4 相关连接 jQuery UI ...

    jquery学习配套资料

    这份学习日志可能是个人或团队在学习过程中记录的笔记,包含了学习心得、技巧和常见问题解决方案。通过阅读这些笔记,你可以借鉴他人的经验,避免走弯路,快速提升jQuery技能。 ### jQuery插件migrate `jquery-...

    jquery攻略

    通过陈宁老师的《jQuery学习宝典》,读者不仅能够系统地掌握jQuery的基础知识和高级技巧,还能通过实际案例加深对技术的理解和应用能力。无论你是刚接触前端开发的新手,还是希望进一步提升技能的中级开发者,本书都...

    jQuery权威指南-源代码

    希望这部耗时数月、承载了我近4年jQuery开发心得和体会的拙著能给每一位阅读过它的读者带来技术上的提升和思路上的启发。非常希望能借本书出版的机会与国内热衷于jQuery技术的开发者交流,如果大家想联系我,欢迎给...

    [jQuery实战第二版].pdf

    总之,《jQuery实战第二版》不仅为初学者提供了一个系统学习jQuery的起点,也为有经验的开发者提供了一个深入研究和提高技能的宝贵资源。通过本书的学习,读者可以更好地掌握jQuery的强大功能,并将其应用于实际项目...

    [jQuery实战第二版].jQuery.in.Action.2nd.Edition

    3. **参与社区**:加入jQuery社区,与其他开发者交流心得和技巧。 4. **持续跟进**:随着技术的发展,不断更新自己的知识体系。 综上所述,《jQuery实战》第二版是一本值得每位Web开发者拥有的书籍,无论是初学者...

    Jquery+Jquery ui资料

    - `jQuery+UI+总结.doc`:这个文档可能是作者对jQuery UI的使用心得和总结,包含了一些实践经验和技巧。 深入理解和熟练运用jQuery和jQuery UI,不仅可以提升网页的用户体验,还能提高开发效率,是现代前端开发者的...

    jquery 入门到精通 学习总结 资源

    3. **jQuery学习笔记**:JQuery学习笔记.doc包含了作者在学习过程中的心得和实践案例,是理论与实际相结合的学习材料,有助于加深理解和记忆。 4. **jQuery技巧大放送**:jQuery技巧大放送.doc收录了一系列实用的...

    jQuery学习心得总结(必看篇).docx

    ### jQuery学习心得总结 #### 一、jQuery简介与特点 jQuery 是一款优秀的 JavaScript 库,它的出现极大地简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等操作。自2006年发布以来,jQuery 已经成为了前端...

    基于jquery的树形结构JsTree 使用心得

    在本文中,我们将深入探讨如何利用jQuery与JsTree来构建这样的功能,同时分享一些实用的技巧和注意事项。 ### 一、JsTree基本使用 1. **安装与引入** 在项目中使用JsTree,首先需要下载其库文件,可以从官方网站...

    Apress Pro SharePoint with jQuery (2011)

    总之,《Apress Pro SharePoint with jQuery (2011)》是一本全面而实用的指南,不仅适合初学者了解 SharePoint 和 jQuery 的基础知识,也适用于有一定经验的开发人员深入学习如何在这两个技术之间建立强大的协同效应...

    jquery笔记1

    虽然描述部分为空,但我们可以从标题推测,博主MichaelZQM可能分享了他在学习和使用jQuery过程中的一些心得和技巧。通常,这样的笔记会包含基础概念解释、实用示例以及可能遇到的问题及其解决方案。 【标签】:...

Global site tag (gtag.js) - Google Analytics