[前端學習]js特效部分學習筆記,第三天
weixin_34162695發表於2017-10-26
滑鼠事件
- 有些之前應該記錄過,這裡作一個總結:
元素.onmousedown 滑鼠按下
元素.onmouseup 滑鼠彈起
元素.onclick 滑鼠點選
元素.ondblclick 滑鼠雙擊
元素.onmouseover 滑鼠經過
元素.onmouseout 滑鼠離開
元素.onmousemove 滑鼠移動
鍵盤事件
- 現在用到的有三個
元素.onkeydown 鍵盤按下
元素.onkeyup 鍵盤彈起
元素.onkeypress 鍵盤按壓
-
onkeypress
的觸發方式和onkeydown
一樣,但是它們之間的編碼不一樣。
-
event.keyCode
可以獲取到對應鍵的編碼
表單事件
- 彙總幾個常用的:
元素.onfocus
表單控制元件獲得焦點
元素.onblur
表單失去焦點
元素.oninput
使用者在表單控制元件輸入的時候執行
元素.onchange
表單控制元件失去焦點後,如果其內容發生了改變執行
正規表示式
正規表示式的建立
- 有兩種方式可以建立正規表示式
- 通過建構函式建立:
var regEx = new RegExp(/正規表示式/);
- 通過字面量建立:
var regEx = /正規表示式/;
- 通過字面量的方式來建立正則用得最多。當然如果正則只使用一次,那麼連變數都可以不用,直接寫也可以。
- 正規表示式必須用
//
包裹起來
test方法
- 正規表示式其實就用來匹配字串,所以當你建立了正則後,肯定還要需要用正則去匹配。js中正則內建了.test方法
-
正則.test(要匹配的值)
,匹配成功返回true,匹配不成功返回false
預定義類
- 預定義類就是已經定義好的匹配格式
. === [^\n\r]
匹配除換行和回車意外的任意字元
\d === [0-9]
匹配數字字元
\D === [^0-9]
匹配非數字字元
\s === [\f\r\t\n\v]
匹配不可見的字元(換行,回車,空格等等)
\S === [^\f\r\t\n\v]
匹配非不可見的字元
\w === [a-zA-Z0-9]
匹配單詞字元(所有英文字母,數字,下劃線)
\W === [^a-zA-Z0-9]
匹配非單詞字元
- ===就是等價於的意思,左右作用完全相同。還可以發現預定於類,大寫和小寫它們的作用正好相反
字元類
- 字串就是通過實際的字元來匹配
- 簡單類
[]
-
/[abc]/
在正則中單獨只寫[]就表示或的意思,例子只要是abc三個字元任意一個字元匹配都可以,注意只有單獨寫不加其他字元類,才是或
- 反向類
^
-
/[^abc]/
反向就是非的意思,例子中只要不是abc的字元都可以匹配。注意:這個字元只有放在[]中才表示非
- 範圍類
-
-
/[a-c]/
橫線表示範圍,例子中a到c之間的任意字元有就能匹配
- 組合類
-
/[a-dA-G0-8]/
組合類實際就是把多個範圍組合起來,在這個組合的範圍裡有就能匹配,注意範圍類和組合類中的範圍都沒有限制,可以隨便寫
邊界符
- 之間寫的驗證符號有一個侷限性,就是隻要字串中有符合了正則的值,那麼就會返回true。但是這種策略在實際中明顯是不行的,如果想要正則嚴格匹配,就需要加上邊界符
-
^
限制開頭
-
/^a/
當^不在中括號裡時,就是邊界符,例子中就表示字串必須是以a開頭才能匹配
-
$
限制結尾
- 嚴格限制
-
/^a$/
如果限制開頭和限制結尾一起寫,就說明必須是以a開頭以a結尾,也就是隻有a才能匹配成功。注意:aa雖然也是a開頭a結尾,但是依然不能匹配成功,只有配合量詞才行。
量詞
- 正則中量詞是用來限制字元允許出現的次數
-
/x*/
*
號表示,x能出現0次或多次,等價於x>=0
-
/x+/
+
號表示,x能出現1次或多次,等價於x>=1
-
/x?/
?
號表示,x能出現0次或者1次,等價於x>=0且x<=1
-
/x{}/
{}
可以自定義x出現的次數。如果只寫{1}
表示x只能出現1次;如果寫{1,}
表示x可以出現1次或多次;如果寫{1,5}
表示x可以出現1-5次,這種完整寫就是限定一個出現次數的範圍
- 注意如果想要量詞來修飾一串字元,必須將字串用()包裹起來。否則它只會修飾它緊跟的那個字元
正則中三個括號的區別
-
{}
大括號定義字元出現的次數
-
[]
中括號定義字元的位置,它內部的字串只佔一個位置(就是一個字元),只要滿足任意一個就行
-
()
小括號用來分組,內部的字串會劃為一個整體組
簡單正則案例
- 注意表單驗證需要嚴格匹配,所以建議都加上^$邊界符
- 驗證座機,座機一般以0開頭,用-來分割。前面一共3-4位數字,後面7-8位數字
/^0\d{2,3}-\d{7,8}$/
- 驗證姓名,中文在瀏覽器中需要用到unicode編碼,[\u4e00-\u9fa5]這個範圍基本就含括了所有的中文漢字,並且一般姓名是2個字以上
/^[\u4e00-\u9fa5]{2,}$/
- 驗證qq,qq號一般是5-11位,且開頭是非0的數字
/^[1-9]\d{4,10}$/
- 驗證手機,手機號一般是11為,且有號段的限制,常見的有13[0-9] 14[57] 15[0-9] 17[1456789] 18[0-9]
/^(13[0-9]|14[57]|15[0-9]|17[1456789]|18[0-9])\d{8}$/
- 驗證郵箱,規律比較多,這裡就不說明了,.號在[]裡不用加轉義符
/^\w+([-+._]\w+)*@\w+([-.]\w+)*\.\w+([.-]\w+)*$/
關於遞迴的正確思考方式
- 遞迴的執行過程是不符合我們正常思維的,所以你想一步一步的回溯遞迴是吃力不討好的方式。
- 其實我們對於遞迴應該換一種思考方式,就是很多時候我們只需要確定推出來的規律是否正確,如果規律是正確的,其實沒有必要回溯遞迴執行的步驟。如果遞迴執行的結果不對,那麼很大原因是規律錯了,而不是程式執行錯了
DOM綜合考試總結
- 通過使用者代理字串識別瀏覽器的方法叫做代理測試
- 單選按鈕支援onclick事件
- 只有innerHTML才能替換元素內部所有內容,包括文字和html標籤
- window.onload是在文件所有元素載入完畢且所有外部檔案都載入完畢才執行
- 如果一個函式沒有寫返回值,那麼呼叫該函式它的返回值為undefined
- 當一個基本資料型別呼叫屬性或者方法時,js內部會自動建立一個對應基本型別的包裝物件
- 動態建立物件的五種方法:
document.write();innerHTML;document.createElement();cloneNode();appendChild()
- for迴圈中設定定時器不會立即執行,要全部迴圈完畢才會依次執行定時器
- 函式的宣告提升優先順序高於變數提升