簡介
jQuery是一個讓JS輕量化的套件,大大簡化JS以下功能的語法
- 操作DOM元素
- 更動CSS
- 事件處理
- 動畫與效果、AJAX…等其他進階功能
並且jQuery是google、微軟等大公司也有在使用、維護的套件,因此質量有保證
起手式
引入原始碼
使用jQuery,當然首先要在html檔中include jQuery原始碼, 可以選擇本地下載後引入,或是使用Google雲端版以google雲端版為例
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
Ready function
JQuery的撰寫通常都會用以下function為起頭$(document).ready(
function(){
// all your jquery code here
}
)
簡單來說
\$ 代表jQuery的起頭
\$ (document)代表當前網頁
ready代表一個行為,表示等到當前網頁全部ready 才執行function
其目的是等所有元素都載入完成,才執行jQuery,否則可能太早選取而選不到還未載入的元素
而這個起手式可以簡化成
$(function(){
// all your jquery code here
}
)
語法架構
jquery幾乎由
$(選擇器).行為()
這個架構組成
選擇器(selector)可以選擇要針對哪一個網頁元素(比如 tag、當前網頁…)
行為()則可以包含事件監聽、元素操作等Jquery所有提供的功能
比如
$(".example1").click(function(){ //事件監聽內要放一個執行function
$(".example2").hide()
})
表示當class="example1"的元素被click時,將class="example2"這個元素隱藏
外層是選取class="example1”,行為是監聽click這個事件
內層是選取class="example2”,行為是隱藏元素
以下是一個例子
==========click me(text)
:)
==========這例子告訴我們:
- 監聽事件的參數是當事件發生時的執行函數
- 任何元素都可以監聽包含click等事件,不一定需要是按紐
在接下來會做更深入的探討
選擇器(selector)
由上例我們可以知道語法架構上
會先以選擇器指定網頁DOM元素
接著再寫入要對該元素做的行為
Jquery的選擇器語法採用與CSS選擇器大致相同
除了常用的
tag , class ,id ,屬性
子孫 ,直屬子孫 ,多重
以外,這邊介紹指定位置選擇器
指定位置選擇器 :nth-child(n)
可以選擇元素的第n個子代
比如以下是一個list
<div>
<p> 水果清單 </p>
<ul>
<li> 香蕉 </li>
<li> 蘋果</li>
<li> 芒果 </li>
</ul>
</div>
單以這段code來說,可以轉換成以下的樹狀結構
可以了解到parent , child 及其child順序在code上是十分直觀的
而nth-child() 則是先選擇該元素,然後再看該元素是否是第n個子代
比如
\$(“div p:nth-child(1)") 會選到 <p> 水果清單 </p>
\$(“ul li:nth-child(2)")會選到 含蘋果的 li
但
\$(“div p:nth-child(2)") 不會選到任何東西,因為此例中沒有p
是第2個子代
- Note
其他位置選擇器還有
:first , :first-child , :even , :odd 但因為比較直觀且有些包含於nth-child,因此不特別介紹
事件處理(Event handler)
事件處理也是依照 $(選擇器).行為() 的架構
只是行為的參數通常是回應事件的函數
也就是 $(選擇器).監聽事件(function(){回應函數})
上一節的click()就是一個例子
以下舉例幾個特別的event function,更多event function可以參考這裡
hover()
在滑鼠於元素上與元素外的事件,可以說是mouseenter(), mouseleave()
的結合
如
$(function(){
$("selector").hover(function(){
//enter;
},
function(){
//leave;
});
})
以下是一個例子
====================
on()
類似socket.io內的on(),可以以event:eventFunction的方式註冊多個 event function
比如
$("p").on({
mouseenter: function(){
$(this).css("background-color", "lightgray");
},
mouseleave: function(){
$(this).css("background-color", "lightblue");
},
click: function(){
$(this).css("background-color", "yellow");
}
});
focus()/blur()
用於form 這個元素,在選取準備輸入(在input上出現輸入光標)時是focus,離開時是blur()
keypress()
按下任何鍵盤按鍵就會觸發
如果要判斷是哪一個按鍵,則會需要使用Event Object,因此以下先介紹 Event Object
注意目前可能只能綁定input這個tag
Event Object
Event Object是一個可作為event handler反應函數輸入參數的物件,會記錄該發生事件的詳細資料,也會提供method供使用者與事件互動(如 preventDefault()可以取消該事件預設反應)
參考這裡
而keyboard、mouse ..等各類型的事件基本上就是繼承Event Object而成的各類型event object,會額外紀錄各種特殊資訊
比如MouseEvent內會有當前滑鼠的位置座標(ClientX,ClientY)、KeyBoardEvent內會有哪一個按鍵被壓下(key) … 等等
使用方法
作為回應函數的參數使用 \\$(選擇器).監聽事件(function(event){回應函數})
整合上一節所講到的keyboard
以下是一個例子
====================
重點程式碼如下
$("input").keypress(function(event){
console.log("hello");
if (event.key == "h"){
$("div").hide();
}
else if(event.key == "s"){
$("div").show();
}
}
可以看出event可做為參數傳入,並且這裡的"event"只是一個變數名字
只要使用事件監聽函數,都會有此輸入參數
更新style
如果需要更新網頁排版位置、字體、顏色、大小 … 等style
就會自然的想到要用CSS
而jQuery也提供css修改函式
\$(“selector”).css(“property”, “value”)
而CSS的property可以參考這裡
以下是一個例子
====================
核心程式碼:
$("#e6").click(function(){
$(".example6").css("color","red");
}
取用/更改 元素內容
text,html,val
取用元素最常使用三個函式
text() , html() , val()
分別代表指定元素的文字、html檔
val() 是特別用在input等跟使用者互動的tag裡面,去取使用者輸入的值
(eg: 聊天室
val = $(“input”).val()
$(“input”).val("") //也可以用來clean
)
若給變數,則會修改為變數內容
例如以下code
<div>
<p> hello world </p>
</div>
執行
\$(“div”).text() 會回傳 hello world (所有子代的文字)
\$(“div”).html() 會回傳 <p> hello world </p>
而若想要修改
只需要\$(“div”).text(":)") 就可以將 hello world 變更為笑臉
attr()
使用規則類似於上面
加入/刪除 元素
加入元素
加入元素可以使用 append() , prepend() (在內部插入) 以及 before() ,after() (在外部插入)
通常以html element作為參數
以以下code為例
<div>
<p id="list"> 水果清單 </p>
<ul>
<li id="banana"> 香蕉 </li>
<li id="apple"> 蘋果</li>
<li id="mango"> 芒果 </li>
</ul>
</div>
若想要在芒果之後加入橘子
可以使用
$("ul").append("<li id="orange"> 橘子 </li>")
或是
$("#mango").after("<li id="orange"> 橘子 </li>")
兩者可以達到一樣的效果,但append是在ul這個parent的尾部加上一個child
after則是單純在mango之後加上一個element
prepend, before則是一樣的概念,只是指定位置不同
- Note 如果做一個聊天室,則每一個訊息就可以用append不斷加入在畫面上
刪除元素
可以單純使用remove()即可
總結
jQuery 格式必為 $(選擇器).行為()
行為在此章介紹了四種
- 事件
$(選擇器).事件(function(event){
//do something
})
- CSS 選擇器
$(選擇器).css("property:value")
- 取值/設值 (以text為例)
$(選擇器).text() //get
$(選擇器).text("something here") //set
- 插入/刪除元素 (以append為例)
$(選擇器).append("html content here")
$(選擇器).remove() //remove
此外jQuery 也有AJAX、動畫..等等強大的功能,未來有機會再介紹
參考資料
https://www./3schools.com/jquery/default.asp