好了,進入正題. 再次申明JQuery很簡單,take easy!
從那開始呢? 最好的切入地方就從 ready 函數開始!
定義
ready(fn);
功能
這是事件模塊中最重要的一個函數,因為它可以極大地提高web應用程序的響應速度。
簡單地說,這個方法純粹是對向window.load事件注冊事件的替代方法。通過使用這個方法,可以在DOM載入就緒能夠讀取並操縱時立即調用你所綁定的函數,而99.99%的JavaScript函數都需要在那一刻執行。
有一個參數--對jQuery函數的引用--會傳遞到這個ready事件處理函數中。可以給這個參數任意起一個名字,並因此可以不再擔心命名沖突而放心地使用$別名。
請確保在 元素的onload事件中沒有注冊函數,否則不會觸發$(document).ready()事件。
可以在同一個頁面中無限次地使用$(document).ready()事件。其中注冊的函數會按照(代碼中的)先後順序依次執行。
通過上面所述,我們可以把ready看做onLoad的替代方法. 這時有的朋友就會問了,有onLoad方法我們干什麼還要用ready方法?
我個人的體會及看法是 onLoad缺點是以後維護起來麻煩,到處都是JavaScript代碼,很容易出問題的喲! 在<<ppk談JavaScript>>中,ppk針對這個問題的看法也是如此,盡量不要在標簽中直接編寫JavaScript 代碼.
實例
兩種編寫方式
一
$(document).ready(function(){alert("Hello World!");});
二
var myFun = function(){alert("Hello World!");}
$(document).ready(myFun);
到這兒我想大家對ready的用法應該是明白了,但對前面的 $(document)應該很迷惑. 這是什麼東東?別急... 現在只要記住這段代碼的功能就是當整個文檔載入完畢後再執行ready內的函數就夠了.
看完下面的代碼我們就明白了$()的用法.
index.html代碼結構如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JQuery測試</title>
<style type="text/css">
.p1 {
background: #ff0000;
}
.p2 {
background: #00ff00;
}
.p3{
background: #0000ff;
}
.myPCss{
font-size:36px;
}
</style>
<script language="javascript" src="jquery-1.3.2.js">
</script>
<script language = "JavaScript" type="text/javascript">
//<![CDATA[
$(document).ready(function(){
$("p").addClass("p1");
$("p").removeClass("p1");
$("#myP").addClass("p2");
$(".myPCss").addClass("p3");
$("#myDiv p").addClass("p3");
$("#myDiv>p").addClass("p3");
$("div+p").addClass("p3");
$("div~p").addClass("p3");
var aP = document.getElementById("myP");
$(aP).addClass("p2");
});
//]]>
</script>
</head>
<body>
<p>快購利眾網1</p>
<p id="myP">快購利眾網2</p>
<p class="myPCss">快購利眾網3</p>
<div id="myDiv">
<div id="myDivInner">
<p>快購利眾網4</p>
</div>
<div id="myDivTemp">
</div>
<p>快購利眾網5</p>
<p>快購利眾網6</p>
</div>
<p>快購利眾網7</p>
</body>
</thml>
代碼解析:
$("p").addClass("p1");
$("p").removeClass("p1");
$("#myP").addClass("p2");
$(".myPCss").addClass("p3");
$("#myDiv p").addClass("p3");
$("#myDiv>p").addClass("p3");
$("div+p").addClass("p3");
$("div~p").addClass("p3");
var aP = document.getElementById("myP");
$(aP).addClass("p2");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$("p").addClass("p1");
$("p").removeClass("p1");
選擇文檔裡全部的<p>元素對象,不論<p>在文檔中所處的層次結構如何, 最後選到了7個<p> 元素對象 "<p>快購利眾網1</p><p id="myP">快購利眾網2</p><p class="myPCss">快購利眾網3</p><p>快購利眾網4</p><p>快購利眾網5</p><p>快購利眾網6</p><p>快購利眾網7</p>"
addClass("css name")函數很簡單,就是為前面$()選擇到的元素對象增加CSS樣式.
removeClass("css name")函數也很簡單,就是去掉前面$()選擇到的元素對象的指定的樣式.
在這兒,這兩段代碼功能抵消,相當什麼也沒做.
$("#myP").addClass("p2");
選擇文檔裡id為"myP"的指定元素對象,並為該元素對象增加名稱為"p2"的樣式. 最後選到了1個<p>元素對象 "<p id="myP">快購利眾網2</p>"
知識點: 如果要選擇指定ID號的元素對象,記得前面用"#"
$(".myPCss").addClass("p3");
選擇文檔裡樣式名為"myPCss"的指定元素對象,並為該元素對象增加名稱為"p3"的樣式. 最後選到了1個<p>元素對象 "<p class="myPCss">快購利眾網3</p>"
知識點: 如果要選擇指定樣式的元素對象,記得前面用"."
現在可以為大家正式介紹$(),在JQuery裡,我們稱她為"選擇器函數",裡面的內容稱為"選擇器".
現在大家自己試試,記住選擇器選擇出的對象有可能是多個喲.
上面的內容是不是挺簡單的!! 嗯,革命才剛剛開始,下面的內容稍稍復雜些因為牽涉到層次的概念,但大家別急,只要記住"選擇器"選擇出的元素對象可能是多個這點就不用怕了.
$("#myDiv p").addClass("p3");
功能:在給定的祖先元素下匹配所有的後代元素
分成兩部分來分析
一,$("#myDiv") 根據上面所學的知識,選擇出1個<div>元素對象, "<div id="myDiv">"
二,$("#myDiv p") 在上面2個<div>元素對象中的任意層中選擇<p>元素對象. 幾個? 3個 "<p>快購利眾網4</p><p>快購利眾網5</p><p>快購利眾網6</p>"
其中"<p>快購利眾網4</p><p>快購利眾網5</p><p>快購利眾網6< /p>"都是在"<div id="myDiv"></div>"內部定義的
雖然"<p>快購利眾網4</p>"是在id為"myDivInner的"div"內部定義的.但因為id 為"myDivInner的"div" 也是id為"myDiv的下層,所以"<p>快購利眾網5</p>"也屬於id為"myDiv的下層. 有些繞口,記住一點就行. A,B操作器中如果是用空格連接,那麼表示B屬於A的下層(可以為任意層)之中
最後為這3個<p>元素對象增加名為"p3"的樣式
知識點: 對於這類有層次的選擇表達式$("A B"),A選擇器和B選擇器可以是"標簽名","#id",".css"三種中的任意一種,中間用空格分開,空格表示任意次.
右邊的B選擇器是在左邊A選擇器選擇的結果上進行內部任意層中選擇, 記住是在左邊選擇出的元素對象(可能是多個)的內部進行再次選擇(可能是多個). <- 這個知識點一定要理解透!
$("#myDiv>p").addClass("p3");
功能:在給定的父元素下匹配所有的子元素
>代表#myDiv下的子元素對象(多個並只是下一層),最後選擇出2個<p>元素對象,""<p>快購利眾網5</p><p>快購利眾網6</p>",並為該<p>對象增加名為"p3"的樣式
$("div+p").addClass("p3");
功能:匹配所有緊接在 div 元素後的 第一個同輩p 元素
+代表緊接著div同層的第一個子元素對象.
id為"myDivInner"同層後面第一個因為是"<div>",所以後沒有緊接著的"<p>"
id為"myDiv"同層後面正好是一個"<p>"
最後選擇出1個<p>元素對象,""<p>快購利眾網7</p>",並為該<p>對象增加名為"p3"的樣式
知識點: 是緊接著,如果A與B之間有其它元素都無法匹配.
$("div~p").addClass("p3");
功能:匹配 #myDiv 元素之後的所有同輩p 元素
該功能與 + 類似,不同的有兩處.
一, +為同輩並且緊跟, ~為同輩不需要一定緊跟
二, +為同輩並且第一個, ~為同輩多個.
var aP = document.getElementById("myP");
$(aP).addClass("p2");
$(aP).addClass("p2") 其實就是$("#myP").addClass("p2") 的另一種形式.
$()中處了可以用字符串的表達式選擇器,還可以使用DOM對象
當你能看到這句話,我想對你說"辛苦了."
學習的過程本來就是艱辛難耐的,唯為堅持才能戰勝一切.
到現在我們應該明白之前的"$(document)"代表什麼意思了吧.
好了, 今天先講到這兒. 要快速熟悉選擇器的用法只有多加練習.更多的高級應用我相信大家都能自己學會,掌握.
作者信息:萬思傑