六、[前端] jQuery

jQuery 簡介

Javascript 的程式庫 library。程式庫就是程式碼的倉庫,裡面有很多工具

每個程式庫都有自己擅長的事情。jQuery 擅長

  • Event

    • click event

  • Traversing

    • 抓到節點後,可以爬到其他節點

  • DOM Manipulate (洞)

    • 把標籤變成物件,document object model

    • 變成物件,就多了很多函式可以用

    • 像是刪除、修改

這三件事情怎麼綜合發生的呢?已待辦清單為例

  • 點擊叉叉

  • 找到叉叉的 li 項目

  • 移除該項目

events 事件的發生

mouse 相關

  • .click() 打開、關閉

  • .hover() 滑到導覽列文字變色

  • .scroll() 滾動到某個地方就縮小 logo

keyboard 相關

  • kepress 完整操作

  • keydown,gmail 按 shift 多選視窗

  • keyup

form 相關

  • blur / focus / change

    • .focues() 選中 input 時,就是 focus 專注

    • .blur() 跳出 focus 狀態時,就是 blur 不專注、模糊

    • .change() focus 後,打了 hi,要 blur 前,就會觸發 change

    • .select() word focus,文字選取反白時

  • submit

    • 註冊、送出表單前,先擋下來驗證資料,正確再送出

$(document).ready()

  • 找 header 底下的 li,但還不存在;只要 ready 準備好再找就好

binding

  • 再解釋 event。

  • 點擊 #header, #header li 都是事件

  • 只要做了之後,有設定要做什麼事情,有 handle,就能做操作

  • 只要在目標上 binding 就好

.on()

  • bind 的 target 如果不存在,就像是跟空氣進來;後來 target 進來後,還是不知道做什麼事情

  • .on() 如何解決不在場的問題?

  • 可以先找在場的人,後來目標進來的話,再跟他說

  • 綁匪先跟父母預告,我要綁你小孩喔,等你小孩回家後,記得要讓我綁

  • 什麼時候會有這種狀況? 例如,AJAX,資料可能後來才進來

events 整理

  • click / hover / scroll

  • keypress / keydown / keyup

  • blur / focus / change

  • submit

  • $(document).ready()

  • bind / on

自己另外想了解拖放 event

traversing 爬樹

html 的架構,就像是一顆樹,是一種樹狀結構,一顆倒過來的樹。traversing 就是在樹上亂跑

  • body

  • #header

    • #posts

      • h1

      • p

      • p

      • #target

        • p

        • p

      • p

    • #sidebar

  • content

  • #footer

find / children

find 找全部下層的東西;children 只找孩子

parent / closest

上一層/最近的祖先

siblings

找同輩

first / last / eq

可是剛剛找的方式,會回傳很多個元素,該怎麼辦?就用數字指定

整理

  • find / children

  • parent / closest

  • siblings

  • first / last / eq

提問

  • 為什麼沒提到讀取一個目標的用法

  • 像是 document.getElementByID('target') 之類的,jQuery 應該有類似的用法吧?

  • 啊,還是上一小節就講了 orz

DOM manipulate 處理網頁元素

插入系列

  • 在 todo 清單底下插入新 item,就是插入的動作

  • .append()

    • 目標元素的最後一個孩子的後面

  • .prepend()

    • 目標元素的第一個孩子的前面

  • .before()

    • 在目標元素之前,sibling

  • .after()

    • 在目標元素之後

另外一個東西

  • .html() 整個取代

  • 如果沒有塞值進去的話,就是當讀取用

其他

  • .remove() 把選到的目標移除

  • .empty() 把目標的內容物全部清空

  • .clone() 複製目標

其他

  • 例如,gmail 打勾信件,會變黃

  • .addClass() 加上 class

  • .removeClass() 移除 class

  • .toggleClass() 開關

其他

  • .css() 修改 css 內容

其他

  • .prop() / .val();property, value,用來讀取屬性的值

其他

  • .data()

  • 像是 gmail 在跟伺服器拿信的內容,要怎麼知道是那一封

  • 每封信有自己的編號 data-id

DOM manipulate 整理

  • append / prepend / before / after

  • html

  • remove / empty / clone

  • addClass / removeClass / clone

  • css

  • prop / val

  • data

jQuery 整理

  • event

  • traversing

  • DOM manipulating

[練習] 極簡版 todo list

用 Codepen 練習,記得要把 JS 區塊引用 jQuery,quick add

需求

  • 有 Lorem list 介面

  • 有能新增 list 的 button

  • 有能刪除 list 的 button

自己試作的

html

css

js

參考後修改的 Codepen

html

css

js

[練習] event binding 做不到的事

AJAX 的概念

舉例

  • 填表單時,在網頁上填好,傳訊息給 server

  • server 回傳結果。如果有錯誤,就提醒

  • 壞處是,只是想知道想東西,卻需要重整頁面

改良

  • server 在背景傳資料給網頁,不用重整頁面

  • 沒有 AJAX 的話,在 Google Docs 修改文字時,就會一直跳頁跳頁跳針跳針

jQuery + AJAX

  • 例如,想刪掉 li,會觸發 delete 的 click event。

  • 前端刪,後端也要刪,透過 jQuery code 和 AJAX call 互動

  • 例如,想獲得 data-id="20" 的資料,透過 traversing 拿,並與 AJAX call 互動

  • 想移除 li,就使用 DOM manipulate 移除

前端小結

  • HTML

  • CSS

  • Javascript

  • jQuery

Last updated

Was this helpful?