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 ,
轉載請保留.
轉載于:https://www.cnblogs.com/leelike/archive/2011/01/20/1940465.html