14个非常有用的jquery技巧,注意事项和最佳实践
1. Methods Return the jQuery Object 通过方法返回Jquery对象实例
jquery大多数方法返回的都是jquery对象,这非常的有用,而且jquery允许链式调用
$someDiv.attr(‘class’, ’someClass’).hide().html(‘new stuff’);
因为返回的总是jquery对象,所以我们有时可以移除不必要的代码。比如,考虑下面的代码:
var someDiv = $(‘#someDiv’);
someDiv.hide();
上边的代码非常的好,但是你可以很容易的把两句合成一句,而得到相同的结果。如下所示:
var someDiv = $(‘#someDiv’).hide();
通过这种方法我们同样可以隐藏someDiv元素,返回的是someDiv变量的引用
2. The Find Selector使用find来查找
jQuery有非常强大的Sizzle引擎来实现选择器,只要你写的选择器不是很差,jQuery都会做出优化,你一般不必担心太多。然而,我们可以稍微做一些改进,这可以使你的脚本性能略有提高。
一般在jquery中能不要用Sizzle引擎就不要用,当然只要有可能,就尽量使用.find()方法。当然有些时候这是不可能的。
// Fine in modern browsers, though Sizzle does begin “running”
$(‘#someDiv p.someClass’).hide();
// Better for all browsers, and Sizzle never inits.
$(‘#someDiv’).find(‘p.someClass’).hide();
上面两行代码执行的结果是完全一样的,但是下面一句的效率要比上面一句的执行效率高。
现代浏览器(除IE6,IE7)都有QuerySelectorAll支持,能允许你像CSS选择器一样获取对象,而不需要用到jQuery中的Sizzle引擎。jQuery会在使用自己的引擎之前检查是否存在这个函数。
对于IE6/IE7,就需要jQuery使用Sizzle引擎,jQuery会把你的选择器转化成一个数组,并且通过从右往左来迭代匹配。通过正则 表达式匹配页面每一个元素,所以你的可以尽量减少选择器的层级,尽可能的使用最右边的选择器,比如使用ID选择器等;这个规则和我们的css的查找规则是 一致的,如果你要优化css选择器也要知道这个规则:从右往左来迭代匹配!
尺度把握:
1.保持代码简单
2.尽可能的使用find()查找,使用浏览器的原生查找函数
3.尽可能使用最右边的选择器,比如ID等
Context Instead?
我们还可以给你的选择器添加一个选择环境(限制范围)。例如:
$(‘.someElements’, ‘#someContainer’).hide();
这段代码用来获取#someContainer对象下的所有someElements类对象。这种方法可以有效地限制DOM遍历的范围,可是在jquery的实现机制用用的是find()方法。
$(‘#someContainer’)
.find(‘.someElements’)
.hide();
证明:
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return jQuery( context ).find( selector );
}
3. Don’t Abuse $(this) 不要滥用$(this)
如果我们不知道DOM各种各样的属性和方法,就会滥用jquery对象
$(‘#someAnchor’).click(function() {
alert( $(this).attr(‘id’) );
});
$(‘#someAnchor’).click(function() {
alert( this.id );
});
上边两段代码,下边的方法性能会更好。
请注意,下面的三个属性应该是经常通过jquery访问的,”src”,”href”和”style”。这些属性在旧版本的IE浏览器当中需要使用getAttribute方法来实现。
证明:
// jQuery Source
var rspecialurl = /href|src|style/;
// …
var special = rspecialurl.test( name );
// …
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
更糟糕的是反复的查询DOM和创建jquery对象。例如:
$(‘#elem’).hide();
$(‘#elem’).html(‘bla’);
$(‘#elem’).otherStuff();
希望你知道这段代码的效率是多么的低和改进它的方法,如果不知道,没有关系,我们这里可以使用jquery链或者缓存#elem对象。
// This works better
$(‘#elem’).hide().html(‘bla’).otherStuff();
// Or this, if you prefer for some reason.
var elem = $(‘#elem’);
elem.hide();
elem.html(‘bla’);
elem.otherStuff();
4. jQuery’s Shorthand Ready Methodready的简写形式
对jquery来说,监听document是否加载完毕非常容易。
$(document).ready(function() {
// let’s get up in heeya
});
虽然,这是非常可能的,但是你可能碰到一个不同的,更令人困惑的功能来包装。
$(function() {
// let’s get up in heeya
});
虽然后者的可读性不如前者,但是却是完全相同的。可以查看一下jquery的源代码
// HANDLE: $(function)
// Shortcut for document ready
if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
5.Keep your Code Safe 让你的代码安全
方法1(使用noConflict)
var j = jQuery.noConflict();
j(’#someDiv’).hide();
// The line below will reference some other library’s $ function.
$(’someDiv’).style.display = ‘none’;
方法2(传入参数Jquery)
(function($) {
// Within this function, $ will always refer to jQuery
})(jQuery);
方法3(通过ready方法)
jQuery(document).ready(function($) {
// $ refers to jQuery
});
6.Be Smart 简化代码
用each代替for,使用数组保存临时变量,使用document fragment,这其实和写原生的Javascript需要注意的一样。
7.AJAX Methods 使用Ajax的方法
Jquery提供了get getJSON post ajax这些有用的ajax方法
8.Accessing Native Properties and Methods 访问原生的属性和方法
比如获取元素id的方法有
// OPTION 1 – Use jQuery
var id = $(’#someAnchor’).attr(’id’);
// OPTION 2 – Access the DOM element
var id = $(’#someAnchor’)[0].id;
// OPTION 3 – Use jQuery’s get method
var id = $(’#someAnchor’).get(0).id;
// OPTION 3b – Don’t pass an index to get
anchorsArray = $(’.someAnchors’).get();
var thirdId = anchorsArray[2].id;
9.Detect AJAX Requests with PHP 使用PHP来检查Ajax请求
通过使用xhr.setRequestHeader(”X-Requested-With”, “XMLHttpRequest”); 服务器端如PHP就可以通过
function isXhr() {
return $_SERVER['HTTP_X_REQUESTED_WITH'] === ‘XMLHttpRequest’;
}
来检查是不是Ajax请求,在一些禁用Javascript的情况下可能会用到
10.jQuery and $ Jquery和$的关系
在Jquery代码的最下面,可以看到下面的代码
window.jQuery = window.$ = jQuery; $其实就是Jquery的一个shortcut
11.Conditionally Loading jQuery 条件加载Jquery
如果CDN没有下载到Jquery,则从本地读取
12.jQuery Filters Jquery Filters
注:$.expr[":"]等价于$.expr.filters
13.A Single Hover Function hover方法
$(’#someElement’).hover(function() {
//在这里可以使用toggle方法来实现滑过和滑出的效果
});
14.Passing an Attribute Object 传入属性对象
当创建一个元素的时候,Jquery1.4可以传入一个属性对象
$(’’, {
id : ’someId’,
className : ’someClass’,
href : ’somePath.html’
});
甚至是Jquery指定的属性或事件如text, click
连接:http://www.iciniao.com/?p=285 ,
转载请保留.