1. 程式人生 > 其它 >與Ajax同樣重要的jQuery(1)

與Ajax同樣重要的jQuery(1)

jQuery框架

jQuery 1.4 是企業主流版本,從jQuery1.6 開始引入大量新特性。最新版本 2.1.1,這裡講解以1.8.3為主(新版本主要是瀏覽器相容問題以及新特性)

jQuery 提供 jquery-1.8.3.js 和 jquery-1.8.3.min.js

jquery-1.8.3.js jQuery框架原始碼,沒有被精簡,體積較大 (主要用來研究 jQuery原始碼),企業開發時,需要匯入 jquery-1.8.3.min.js (精簡過)

1.jQuery程式快速入門

window.onload = function() {...}

等價於$(document).ready(function(){...});

①:jQuery基本使用

傳統Js寫法:

<scripttype="text/javascript">
window.onload=function(){
alert("傳統JS,Ok");
}
</script>
jQuery寫法:
<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<scripttype="text/javascript">
$(function(){
alert("ok");
});
$(document).ready(function(){
alert("OK");
});

</script>

②:jQuery核心函式

1)jQuery(callback) // 頁面onload 函式

2)jQuery(expression, [context]) // 查詢指定物件 ------ 九種選擇器

3)jQuery(elements) // 將dom物件轉換為jQuery物件

* document 是DOM物件 jQuery(document) 成為了jQuery物件

4)jQuery(html, [ownerDocument]) // 將html轉換jQuery物件

* jQuery("<p>hello</p>") ----- 得到 jQuery物件

Demo:

<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){
// 獲得div物件
var domObject = document.getElementById("mydiv"); // 獲得DOM物件
domObject.innerHTML = "ITCAST";
// 通過包裝DOM物件,成為jQuery物件
var $jQueryObject = $(domObject); // DOM物件成為 jQuery物件
$jQueryObject.html("傳智播客"); // html()是jQuery物件的方法
// 通過訪問jQuery物件下標0 元素,獲得DOM物件
var dom1 = $jQueryObject[0]; // 轉換jQuery物件為DOM物件
var dom2 = $jQueryObject.get(0);
dom2.innerHTML = "傳智播客ITCAST";
});
</script>
<body>
<divid="mydiv">hello</div>
</body>

jQuery物件無法使用DOM物件屬性方法,DOM物件也無法使用jQuery物件屬性方法。但是我們可以使用jQuery提供方法,將DOM物件通過jQuery()函式包裝成為jQuery物件,同樣我們可以把jQuery物件轉化成DOM物件。

jQuery--->DOM物件:$jQuery物件[0]或者$jQuery物件.get(0);

DOM物件--->jQuery:$(DOM物件)

2.jQuery九種選擇器

選擇器是jQuery 的根基, 在 jQuery 中, 對事件處理, 遍歷 DOM 和 Ajax 操作都依賴於選擇器

jQuery(expression, [context]) 在核心函式jQuery中傳入表示式,對頁面中元素進行選擇======================jQuery核心函式第二種!

①:基本選擇器

根據元素id屬性、class屬性、元素名稱 對元素進行選擇

id選擇器: $("#元素id屬性")

class選擇器: $(".元素class屬性")

元素名稱選擇器:$("元素名稱")

多個選擇器同時使用 selector1,select2 例如 : $("#xxid ,.xxxclass") 同時選擇id 和 class匹配兩類元素

練習1:

² 通過each() 在每個div元素內容前 加入 “傳智播客”

² 通過size() / length 列印頁面中 class屬性為 itcast 的元素數量

² 通過index() 列印 id屬性為foo 的div標籤 是頁面內的第幾個div標籤

<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<scripttype="text/javascript">
$(function(){
// 選中所有div 得到集合
$("div").each(function(){
// 在每個div內容前加入“傳智播客”
// this.innerHTML = "傳智播客" + this.innerHTML ;
$(this).html("傳智播客" + $(this).html());
});
// 通過size() / length 列印頁面中 class屬性為 itcast 的元素數量
// alert($(".itcast").size());
alert($(".itcast").length);
// 通過index() 列印 id屬性為foo 的div標籤 是頁面內的第幾個div標籤
alert($("div").index($("#foo")));
});
</script>
<body>
<div>DIVAAAA</div>
<divclass="itcast">DIVBBBB</div>
<div>DIVCCCC</div>
<div>DIVDDDD</div>
<divclass="itcast">DIVEEEE</div>
<divid="foo">DIVFFFF</div>
<p>PAAAA</p>
<pclass="itcast">PBBBB</p>
<p>PCCCC</p>
</body>

②:層級選擇器

根據祖先、後代、父子關係、兄弟關係 進行選擇

ancestor descendant 獲取ancestor元素下邊的所有元素 $("form input")

parent > child 獲取parent元素下邊的所有直接child 子元素 $("form > input")

prev + next 獲取緊隨pre元素的後一個兄弟元素 $("label + input")

prev ~ siblings 獲取pre元素後邊的所有兄弟元素 $("form ~ input")

練習2:

² 將class屬性值為itcast的元素下所有a元素字型變為紅色

² 將class屬性值為itcast的元素下直接a元素字型變為藍色

² 將div元素後所有兄弟a元素,字型變為黃色,大小變為30px

<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<scripttype="text/javascript">
$(function(){
// 將class屬性值為itcast的元素下所有a元素字型變為紅色
$(".itcast a").css("color","red");
// 將class屬性值為itcast的元素下直接a元素字型變為藍色
$(".itcast>a").css("color","blue");
// 將div元素後所有兄弟a元素,字型變為黃色,大小變為30px
$("div~a").css({color:'yellow','font-size':'30px'});
});
</script>
<body>
<divclass="itcast">
<a>div link</a>
<p>info
<a>p link</a>
</p>
</div>
<a>link</a>
<pclass="itcast">
<a>p link</a>
</p>
<a>link</a>
</body>

執行結果

③:基本過濾選擇器

:first 選取第一個元素 $("tr:first")

:last 選取最後一個元素 $("tr:last")

:not(selector) 去除所有與給定選擇器匹配的元素 $("input:not(:checked)")

:even 選取所有元素中偶數索引的元素,從 0 開始計數 $("tr:even") ----- 選取奇數元素

:odd 選取所有元素中奇數索引的元素 ,從0 開始計數 $("tr:odd") ------ 選取偶數元素

:eq(index) 選取指定索引的元素 $("tr:eq(1)")

:gt(index) 選取索引大於指定index的元素 $("tr:gt(0)")

:lt(index) 選取索引小於指定index的元素 $("tr:lt(2)")

:header 選取所有的標題元素 如:h1, h2, h3 $(":header")

:animated 匹配所有正在執行動畫效果的元素

練習3:

² 設定表格第一行,顯示為紅色

² 設定表格除第一行以外 顯示為藍色

² 設定表格奇數行背景色 黃色

² 設定表格偶數行背景色 綠色

² 設定頁面中所有標題 顯示為灰色

² 設定頁面中正在執行動畫效果div背景黃色,不執行動畫div背景綠色

<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<scripttype="text/javascript">
$(function(){
// 設定表格第一行,顯示為紅色
$("tr:first").css("color","red");
// 設定表格除第一行以外 顯示為藍色
// $("tr:not(:first)").css("color","blue");
$("tr:gt(0)").css("color","blue");
// 設定表格奇數行背景色 黃色 /設定表格偶數行背景色 綠色
$("tr:even").css("background-color","yellow");
$("tr:odd").css("background-color","green");
// 設定頁面中所有標題 顯示為灰色
$(":header").css("color","gray");
// 設定頁面中正在執行動畫效果div背景黃色,不執行動畫div背景綠色
// 無法選中正在執行動畫的元素
$("div:not(:animated)").css("background-color","green");
$("div").click(function(){
$(this).css("background-color","yellow");//設定執行動畫元素
$(this).slideUp("slow");
});
});
</script>
<body>
<h1>表格資訊</h1>
<h2>這是一張商品表</h2>
<tableborder="1"width="600">
<tr>
<th>商品編號</th>
<th>商品名稱</th>
<th>售價</th>
<th>數量</th>
</tr>
<tr>
<td>001</td>
<td>冰箱</td>
<td>3000</td>
<td>100</td>
</tr>
<tr>
<td>002</td>
<td>洗衣機</td>
<td>2000</td>
<td>50</td>
</tr>
<tr>
<td>003</td>
<td>熱水器</td>
<td>1500</td>
<td>20</td>
</tr>
<tr>
<td>004</td>
<td>手機</td>
<td>2188</td>
<td>200</td>
</tr>
</table>
<div>

slideDown(speed, [callback])

概述

通過高度變化(向下增大)來動態地顯示所有匹配的元素,在顯示完成後可選地觸發一個回撥函式。

這個動畫效果只調整元素的高度,可以使匹配的元素以“滑動”的方式顯示出來。在jQuery 1.3中,上下的padding和margin也會有動畫,效果更流暢。

引數

speedString,Number三種預定速度之一的字串("slow", "normal", or "fast")或表示動畫時長的毫秒數值(如:1000)

callback (可選)FunctionFunction在動畫完成時執行的函式

</div>

<div>

fadeOut(speed, [callback])

概述

通過不透明度的變化來實現所有匹配元素的淡出效果,並在動畫完成後可選地觸發一個回撥函式。

這個動畫只調整元素的不透明度,也就是說所有匹配的元素的高度和寬度不會發生變化。

引數

speedString,Number三種預定速度之一的字串("slow", "normal", or "fast")或表示動畫時長的毫秒數值(如:1000)

callback (可選)Function在動畫完成時執行的函式

</div>

</body>

④:內容過濾選擇器

內容選擇器是對子元素和文字內容的操作

:contains(text) 選取包含text文字內容的元素 $("div:contains('John')") 文字內容含有john 的所有div

:empty 選取不包含子元素或者文字節點的空元素 $("td:empty") td元素必須為空

:has(selector) 選取含有選擇器所匹配的元素的元素 $("div:has(p)").addClass("test"); 含有p子元素的div

:parent 選取含有子元素或文字節點的元素 $("td:parent") 所有不為空td元素選中

練習4:

² 設定含有文字內容 ”傳智播客” 的 div 的字型顏色為紅色

² 設定沒有子元素的div元素 文字內容 ”這是一個空DIV“

² 設定包含p元素 的 div 背景色為黃色

² 設定所有含有子元素的span字型為藍色

<script type="text/javascript" src="../jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){
// 設定含有文字內容 ”傳智播客” 的 div 的字型顏色為紅色
$("div:contains('傳智播客')").css("color","red");
// 設定沒有子元素的div元素 文字內容 ”這是一個空DIV“
$("div:empty").html('這是一個空DIV');
// 設定包含p元素 的 div 背景色為黃色
$("div:has(p)").css("background-color","yellow");
// 設定所有含有子元素的span字型為藍色
$("span:parent").css("color","blue");
});
</script>
<body>
<div>今天是個晴天</div>
<div>明天要去傳智播客學 java</div>
<div><span>JavaScript</span> 是網頁開發中指令碼技術</div>
<div>Ajax 是非同步的 JavaScript和 XML</div>
<div><p>jQuery</p> 是 JavaScript一個 輕量級框架</div>
<div></div>
</body>

⑤:可見性過濾選擇器

根據元素的可見與不可見狀態來選取元素

:hidden 選取所有不可見元素 $("tr:hidden")

:visible 選取所有可見的元素 $("tr:visible")

練習5:

² 為表單中所有隱藏域 新增 class屬性,值為itcast

² 設定table所有 可見 tr 背景色 黃色

² 設定table所有 隱藏tr 字型顏色為紅色,顯示出來 ,並輸出tr中文字值

<script type="text/javascript" src="../jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){
// 為表單中所有隱藏域 新增 class屬性,值為itcast
$("input:hidden").addClass("itcast");
// 設定table所有 可見 tr 背景色 黃色
$("tr:visible").css("background-color","yellow");
// 設定table所有 隱藏tr 字型顏色為紅色,顯示出來 ,並輸出tr中文字值
$("tr:hidden").each(function(){
alert($(this).text());
});
$("tr:hidden").css("color","red");
$("tr:hidden").css("display","block");
});
</script>
<body>
<form>
訂單號 itcast-xxxx 金額 100元
<!-- 隱藏令牌號 -->
<input type="hidden" name="token"
value="12312-0xccx-zx-asd-21-asd-gdfgd" />
<input type="submit" value="確認支付" />
</form>
<table>
<tr style="display:none;">
<td>冰箱</td>
</tr>
<tr style="visibility:hidden;">
<td>洗衣機</td>
</tr>
<tr>
<td>熱水器</td>
</tr>
</table>
</body>

⑥:屬性過濾選擇器

通過元素的屬性來選取相應的元素

[attribute] 選取擁有此屬性的元素 $("div[id]")

[attribute=value] 選取指定屬性值為value的所有元素

[attribute !=value] 選取屬性值不為value的所有元素

[attribute ^= value] 選取屬性值以value開始的所有元素

[attribute $= value] 選取屬性值以value結束的所有元素

[attribute *= value] 選取屬性值包含value的所有元素

練習6:

² 設定所有含有id屬性的div,字型顏色紅色

² 設定所有class屬性值 含有itcast元素背景色為黃色

² 對所有既有id又有class屬性div元素,新增一個點選事件,列印div標籤中內容

<script type="text/javascript" src="../jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){
// 設定所有含有id屬性的div,字型顏色紅色
$("div[id]").css("color","red");
// 設定所有class屬性值 含有itcast元素背景色為黃色
$("[class *= 'itcast']").css("background-color","yellow");
// 對所有既有id又有class屬性div元素,新增一個點選事件,列印div標籤中內容
$("div[id][class]").click(function(){
alert($(this).html());
});
});
</script>
<body>
<div>AAAA</div>
<div id="mydiv" class="itcast1">BBBB</div>
<div class="itcast2">CCCC</div>
<div id="mydiv2">DDDD</div>
<div class="divclass">EEEE</div>
<div id="xxx" class="itcast3">FFFF</div>
<p class="p-itcast">PPPPPP</p>
</body>

⑦:子元素過濾選擇器

對某元素中的子元素進行選取

:nth-child(index/even/odd) 選取索引為index的元素、索引為偶數的元素、索引為奇數的元素 ----- index 從1開始 區別 eq

:first-child 選取第一個子元素

:last-child 選取最後一個子元素

:only-child 選取唯一子元素,它的父元素只有它這一個子元素

練習7:

² 選擇id屬性mytable 下3的倍數行,字型顏色為紅色

² 表格 奇數行 背景色 黃色

² 表格 偶數行 背景色 灰色

² 只有一個td的 tr元素 字型為 藍色

<scripttype="text/javascript"src="../jquery-1.8.3.min.js"></script>
<scripttype="text/javascript">
$(function(){
// 選擇id屬性mytable 下3的倍數行,字型顏色為紅色
$("#mytable tr:nth-child(3n)").css("color","red");
// 表格 奇數行 背景色 黃色 / 表格 偶數行 背景色 灰色
$("table tr:nth-child(even)").css("background-color","gray");
// $("table tr:nth-child(odd)").css("background-color","yellow"); // 從1計數
$("tr:even").css("background-color","yellow");// 從0計數
// 只有一個td的 tr元素 字型為 藍色
$("tr td:only-child").css("color","blue");
});
</script>
</head>
<body>
<tableborder="1"width="400"id="mytable">
<tr><td>1</td><td>冰箱</td></tr>
<tr><td>2</td><td>洗衣機</td></tr>
<tr><td>3</td><td>熱水器</td></tr>
<tr><td>4</td><td>電飯鍋</td></tr>
<tr><td>5</td><td>電磁爐</td></tr>
<tr><td>6</td><td>豆漿機</td></tr>
<tr><td>7</td><td>微波爐</td></tr>
<tr><td>8</td><td>電視</td></tr>
<tr><td>9</td><td>空調</td></tr>
<tr><td>10</td><td>收音機</td></tr>
<tr><td>11</td><td>排油煙機</td></tr>
<tr><td>12</td><td>加溼器</td></tr>
<tr><td>13 電暖氣</td>加溼器</tr>
</table>
</body>

⑧:表單過濾選擇器

選取表單元素的過濾選擇器

:input 選取所有<input>、<textarea>、<select >和<button>元素

:text 選取所有的文字框元素

:password 選取所有的密碼框元素

:radio 選取所有的單選框元素

:checkbox 選取所有的多選框元素

:submit 選取所有的提交按鈕元素

:image 選取所有的影象按鈕元素

:reset 選取所有重置按鈕元素

:button 選取所有按鈕元素

:file 選取所有檔案上傳域元素

:hidden 選取所有不可見元素

練習8:

² 對所有text框和password框,新增離焦事件,校驗輸入內容不能為空

² 對button 新增 點選事件,提交form表單

<script type="text/javascript" src="../jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function(){
// 對所有text框和password框,新增離焦事件,校驗輸入內容不能為空
$(":text,:password").blur(function(){
// 獲得表單元素內容 val()
var value = $(this).val(); // 獲得value 屬性
// 將輸入內容 trim
if($.trim(value) == "" ){
alert("使用者名稱和密碼不能為空");
}
});
// 對button 新增 點選事件,提交form表單
$(":button").click(function(){
$("#myform").submit();
});
});
</script>
<body>
<form action="regist" method="post" id="myform">
使用者名稱 <input type="text" name="username" /><br/>
密碼 <input type="password" name="password" /><br/>
性別 <input type="radio" name="gender" value="男" />男
<input type="radio" name="gender" value="女"/><br/>
城市 <select name="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
</select>
個人簡介 <textarea rows="5" cols="60" name="introduce"></textarea>
<input type="button" value="提交"/>
</form>
</body>

⑨:表單物件屬性過濾選擇器

選取表單元素屬性的過濾選擇器

:enabled 選取所有可用元素

:disabled 選取所有不可用元素

:checked 選取所有被選中的元素,如單選框、複選框

:selected 選取所有被選中項元素,如下拉列表框、列表框