一、JavaScript概述
一、什麼是JavaScript
JavaScript簡稱JS,是一種專門運行於JS解釋器/引擎中的解釋型腳本語言
二、JS發展史
一、1992年Nombas公司開發了一款運行在網頁中的腳本語言,名稱爲CMM(c--),後來改名爲ScriptEase
二、1995年Netscape(網景)爲本身的瀏覽器Navigator2.0開發了另外一款腳本語言(LiveScript),改名爲JavaScript
三、1996年,Microsoft爲本身的IE3.0,發佈了JavaScript的克隆版本JScript
四、1997年,Netscape找到了ECMA(歐洲計算機制造商協會),將JS提交給了ECMA。今後JS的核心改名爲EMCA Script簡稱ES
JS的組成:
一、核心—EMCA Script:包含了JS的最基本的語法規範
二、文檔對象模型(Document Object Model)簡稱DOM
容許JS操做HTML網頁上的內容
DOM的規範是有W3C來制定的
三、瀏覽器對象模型(Browser Object MOdel)簡稱BOM
容許JS操做瀏覽器
二、使用JS(JS引用)
一、使用元素事件執行JS腳本代碼
事件:用戶在元素上所激發的行爲操做
一、onclick事件:當用戶點擊元素時作的操做
語法:
<ANY onclick="JS腳本代碼">
JS腳本代碼:
console.log('向控制檯中輸出的內容');
二、嵌入在網頁中的<script></script>
語法:<script></script>在任何位置均可以
特色:
網頁加載的時候就開始執行
document.write():向網頁輸出一句話
注意:若是經過按鈕的單擊事件執行document.write()的話,則會刷新網頁內容
示例:
<script>
document.write("<h1>hello world<h1>")
<script>
三、將JS腳本寫在外部的JS文件中
步驟:
一、建立JS文件(XXX.js)並編寫腳本
二、在網頁中對js文件進行引入
<script src="js文件路徑">此處不能寫js代碼</script>
三、JS基礎語法
一、語法規範
一、JS都是由語句組成的
一、由運算符,表達式,關鍵字組成的稱爲語句
二、嚴格區分大小寫
三、每條語句必須以;分號表示結束
二、JS中的註釋
一、單行註釋://註釋內容
二、多行註釋:/*註釋內容*/
四、JS中的變量 和 常量
一、變量
一、聲明變量的語法
聲明:var 變量名;
賦值:變量名 = 值;
聲明並賦值:var 變量名=值;
注意:
一、聲明變量時,儘可能使用var關鍵字,若是省略,也能夠,可是容易處問題(全局污染)
二、聲明變量但未賦值的話,默認值爲undefined
二、變量名的命名規範
一、不能使用JS中的關鍵字或保留關鍵字
二、有字母,數字,下劃線(_)和$組成
三、不能以數字開頭
四、儘可能不要重複
五、儘可能見名知意
六、如無特殊需求(團隊要求)的話,儘可能使用小駝峯命名法
二、常量
一、什麼是常量:一經聲明就不容許修改的數據就是常量
二、語法
const 常量名 = 值;
注意:常量名採用全大寫的形式
五、數據類型
一、做用:約束了數據在內存中所佔空間大小問題的
二、JS數據類型分類
一、基本數據類型(值類型)
一、number類型
數字類型,能夠表示32位的整數或64位的浮點數
整數:
表示十進制,八進制,十六進制
十進制:var num = 111;
八進制:var num = 010;
十六進制:var num = 0x10;
小數:
小數點計數法:var num = 123.456;
科學計數法:var num = 1.5e2;
二、string類型(所佔內存爲2-4字節)
字符串:都是由Unicode的字符,數字,標點組成的
一、查看字符的Unicode碼(能夠根據的Unicode碼對應的二進制判斷所佔內存(多少字節))
var str = "張三丰";
var uCode =str.charCodeAt(0).toString(2)
二、若是將Unicode碼轉換成對應的字符(只能轉16進制的,若是是二進制或八進制須要先轉換成16進制)
已知Unicode碼:5f20
var str = '\u5f20';
console.log(str);
三、文中範圍
'\u4e00'~'\u9fa5'
四、轉義字符
\n: 換行
\t: 製表符
\": "
\': '
\\: \
三、boolean類型
布爾類型,只用於表示真(true)或假(false)
注意:
在參與數字運算時,true當作1運算,false當作0
四、查看數據類型
使用typeof() 或 typeof 均可以查看變量的數據類型
二、引用數據類型
三、數據類型轉換
一、隱式轉換
不一樣類型的數據在左加法運算時,會進行自動轉換
一、字符串+數字:將數字轉換爲字符串
var num = 15;
var str = ‘18’;
var r = num+str;//1518
var r = '15'+18+15;//151815
var r = 15+18+'15';//3315
二、數字+布爾:將布爾轉爲數字作加法(true轉爲1,false轉爲0)
三、字符串+布爾:將布爾轉爲字符串作鏈接
var boo = true;
var str = ‘Hello’;
var r = boo+str;//trueHello
四、布爾+布爾:都轉爲數字作加法運算
二、強制轉換(轉換函數)
一、toString():將任意類型的數據轉爲字符串,並返回轉換後的結果
語法:
var r = 變量.toString();
var r = 變量+'';
二、parseInt()
做用:將指定的數據儘可能轉換爲整數,若是實在沒法轉換的話,則返回NaN(Not a Number)
示例:
一、var r = parseInt(‘456’);
r:456
二、var r = parseInt(‘123.556’);
r:123
三、var r = parseInt(‘123Hello’);
r:123
四、var r = parseInt(‘hello123’);
r:NaN
三、parseFloat()
做用:儘可能將任意類型的數據轉爲小數,若是實在沒法轉換的話,那麼結果爲NaN
示例:
一、var r = parseFloat('3.14');
r:3.14
二、var r = parseFloat('3.14hello');
r:3.14
三、var r = parseFloat('hello3.14')
r:NaN
四、Number()
做用:將任意類型的數據轉爲數字,只要包含非法字符,結果就是NaN
示例:
一、var r = Number('123hello');
r:NaN
六、運算符
一、算數運算符
一、+ - * / %
二、++ --
++:自增運算符,在自身基礎上作+1操做
--:自減運算符,在自身基礎上作-1操做
後綴:
var num = 10;
num++;
特色:先使用num的值,而後再作自增運算
var num = 10;
console.log(num++);輸出10
console.log(num); 輸出11
前綴:
var num = 10;
++um;
特色:先對變量進行自增,而後再使用變量的值
var num = 10;
console.log(++num);輸出11
console.log(num); 輸出11
練習:
var num = 5;
var result = num + ++num + num++ + ++num +num;
5 + (6)6 + 6(7) + (8)8 + 8
二、關係運算符(比較運算符)
> < >= <= == != === !==
一、10>5:true
二、'10'>5:true
運算符兩端若是有一個是數字的話,那麼另一個會自動轉換(經過Number)成數字,再進行比較
三、'10a' > 5:false
四、"10a" < 5:false
NaN除了 != 運算時爲true,其餘都爲false
五、"10" > "5":false
比較的是字符1的ASCII 和 字符5的ASCII
六、"張三丰" > "張無忌":false
比較三和無的Unicode碼的大小
七、’10‘ == 10 :true
===、判斷數值和數據類型必須全相等時才返回true
!==、只要數值或數據類型中有一個不相等即返回true
三、邏輯運算符
!:邏輯非,等同於python中的not
&&:邏輯與,and
||:邏輯或,or
四、爲運算符
一、按位與 &:兩個數字的二進制進行比較,對應位都爲1,則該結果爲1,不然 爲0
場合:奇偶性驗證,將一個數與1按位求與,結果爲1則爲奇數,不然爲偶數
7 & 1 =1
7:111
1:001
二、按位或 |:只要有1即爲1,
三、按位異或^:不一樣則爲1,相同則爲0
場合:不借助第三方變換兩個數字
示例:
var a = 3;
var b = 5;
a = a ^ b; 110
3:011
5:101
b = b ^ a; 011
b(5):101
a(6):110
a = a ^ b; 101
a(6):110
b(3):011
五、條件運算符(三目運算)
語法:?:
條件表達式 ? 表達式1 :表達式2;
當條件表達式的結果爲true的時候,執行表達式1中的內容,並將表達式1的結果做爲總體表達式的結果,不然執行表達式2
練習:
BMI計算器
一、分兩次從彈框中輸入數據
一、第一次:輸入 身高(m)
二、第二次:輸入 體重(kg)
二、計算bmi
bmi = 體重 /(身高*身高)
三、
若是bmi的值小於20,提示偏瘦
若是bmi的值大於25,提示偏胖
不然:提示正常
六、賦值運算符
+= -= *= /= ^=
a ^= b 等價於 a =
a^b
七、流程控制
一、程序控制結構
一、順序結構
二、分支結構/選擇結構
三、循環結構
二、分支結構
一、if結構
一、if結構
語法:
if(條件表達式){
語句塊;
}
二、if...else結構
語法:
if(條件表達式){
語句塊1;
}else{
語句塊2;
}
三、if ...else if...結構
語法:
if(條件表達式){
語句塊1
}else if(條件表達式2){
語句塊2;
}else if(條件表達式n){
語句塊n;
}else{
語句塊n+1;
}
練習:
一、分三次從彈框中輸入年,月,日
二、判斷該日是概念的第幾天
二、switch結構
一、做用:等值判斷
二、語法
switch(變量){
case 值1:
語句塊1;
break;//跳出switch結構,能夠選
case 值:
語句塊2;
break;//跳出switch結構,能夠選
.......
default:
語句塊n;
/*全部case都未匹配上時,才執行default*/
}
注意:
一、變量 和 case後的值的判斷,採用===來判斷的
二、break,若是省略break的話,則從匹配的case塊開始,依次向下執行(執行下面全部case塊的內容,或default塊內容)直到碰見break或執行結束
三、練習:
從彈框中輸入1-7任意一個數字表示1-星期日
輸入1:今天吃紅燒肉
輸入2:今天吃紅燒魚
輸入3:今天吃清蒸甲魚
輸入4:今天吃紅燒皮皮蝦
輸入5:今天吃紅燒排骨
輸入6:今天休息
輸入7:今天休息
其餘:輸入有誤!
三、循環結構
一、做用:重複執行相同或類似的代碼
二、循環的二要素
一、循環條件:循環從何時開始,到何時結束
二、循環操做:循環中要作的事情(要執行的代碼)
三、while循環
一、語法
while(循環條件){
循環操做
}
流程:
一、判斷循環條件(boolean值/表達式)
二、若是條件爲真,則執行循環操做
2.一、執行完操做後,再回來判斷條件
三、若是條件爲假,則退出循環
四、do...while循環
語法:
do{
循環操做;
}while(條件);
流程
一、先執行循環操做
二、再判斷循環條件
三、若是條件爲真,再繼續執行循環條件,當條件爲假時結束循環
五、循環的流程控制
一、break:跳出循環結構
二、continue:結束本次循環,繼續執行下次循環
六、for循環
一、while
打印1-100之間的全部數字
var i = 1;//循環條件的初始化
while(i <= 100){//循環條件的判斷
console.log(i);//循環操做
i++;//更新循環條件
}
二、語法:
for(表達式1;表達式2;表達式3){
循環操做;
}
表達式1:循環條件的初始化
表達式2:循環條件的判斷
表達式3:更新循環條件
流程:
一、先執行表達式1,即循環條件初始化(執行1次)
二、判斷表達式2的值,true 或 false
三、若是表達式2的結果爲true則執行循環操做,若是爲false則退出循環
四、執行循環操做後,再執行表達式3
五、再判斷表達式2,同步驟2
for(var i = 1; i<=100; i++){
console.log(i)
}
七、循環嵌套
容許在一個循環中再出現另外一個循環
for(var i=1; i<=10;i++){//外層循環
for(var j=1;j<1=0;j++){//內層循環
}
}
外層循環走一次,內層循環走一輪
八、函數-function
一、函數的聲明
function 函數名(參數列表){
函數體
}
一、參數列表
參數列表,容許聲明0或多個參數,多個參數的話使用,逗號隔開,沒有默認參數
二、返回值
返回值是可選的,若是須要返回值的話,經過return 值;進行返回
二、函數調用
在任意JS的合法位置處,都容許作函數調用
函數名(參數列表);
三、由ES提供的函數(內嵌函數)
在網頁中無需聲明,就能夠直接使用
parseInt()/parseFolat()/Number()
一、isNaN(value):判斷value是否爲非數字,返回true表示不是數字,返回false表示是數字
示例:
一、isNaN(1)//false
二、isNaN(‘1’)//false
三、isNaN(‘hello’)//true
二、eval():執行由字符串來表示的JS代碼
四、局部變量與 全局變量
一、全局變量:一經聲明,在JS的任何位置處都能使用的變量就是全局變量
一、在<script></script>內部在函數體外邊
二、或則在函數內部不適用var聲明的變量也是全局變量(不建議使用)
二、局部變量:使用var關鍵字,而且聲明在function中的變量
局部變量的做用於只在聲明的函數內,出了函數就不能使用
九、數組(在python中稱爲列表)
一、什麼是數組
數組(Array)是一個用於保存批量數據的結構,即一個變量中容許保存多個數據。是按照線性結構的方式來保存數據的
說明:字符串與數組相加,會將數組準變爲字符串
示例:
‘names’+['張無忌','張翠山','張三丰','金毛獅王']
names張無忌,張翠山,張三丰,金毛獅王
二、建立數組
一、建立一個空數組
var 數組名 = [];
二、建立數組並初始化元素
var 數組名 = [元素1,元素2,... ,...];
三、建立一個空數組:
var 數組名 = new Array();
四、建立數組並初始化元素
var 數組名 = new Array(元素1,元素2,... ,...);
三、數組的使用
獲取 或設置數組中的元素,一概都使用下標
下標範圍:從0開始,到元素個數-1爲止,若是超出下標不會報錯,而是返回undefined
一、向獲取元素的第二個元素
數組名[1];
二、爲數組元素賦值
數組名[下標] = 值;
說明:若是下標越界,會將越界的下標賦值,前面的爲undefined(空empty)
四、獲取數組的長度
屬性:length
用法:數組名.length;
使用場合:
一、配合循環,遍歷數組中的每一個元素
二、可以找到數組中,最新要插入元素的位置
五、關聯數組
一、什麼是關聯數組
JS中數組分爲索引數組 和 關聯數組
索引數組:由數字作下標
關聯數組:由字符串作下標
二、聲明和使用關聯數組
var names = [];
names['x'] = '西遊記';
names['y'] = '紅樓夢';
三、注意
length只能統計索引數組,不能統計關聯數組
四、使用for ... in遍歷數組
可以遍歷數組中全部的數字下標和字符串下標
for(var 變量 in 數組){
變量:數組中全部的數字下標和字符串下標(變量爲字符串)
}
六、數組的經常使用API
一、toString():將數組轉換爲字符串並返回
console.log(['aa','bb','cc'].toString())//aa,bb,cc
二、join(seperator):返回一個由指定鏈接符鏈接的數組元素的字符串,鏈接符不能數\反斜槓,默認是逗號
console.log(['aa','bb','cc'].join('|'))//aa|bb|cc
三、concat
(arr,arr2,...):拼接多個數組到一塊兒,並返回拼接後的結果
注意:該函數並不會改變數組,而是返回拼接後的一個副本
四、reverse():反轉
語法:arr.reverse()
注意:該函數會改變現有數組的結構
五、sort():排序,默認狀況下,按照元素的Unicode碼進行排序(升序)
注意:該函數會改變現有數組的結構
容許經過自定義的排序函數來指定數字的排序規則
語法:arr.sort(排序函數名);
一、指定排序函數
function sortAsc(a,b){將數組的值依次傳遞給a,b
return a-b;//返回值大於0則交換a b的位置,
}
二、調用arr.sort(sortAsc)
三、使用匿名函數
arr.sort(function(a,b){a,b});
六、進出棧操做
棧式操做:提供了快速操做數組頭部或尾部的方法
一、push():入棧,向數組的尾部添加新元素,並返回新數組的長度
二、pop():出棧,刪除並返回數組尾部的元素
三、unshift():向數組頭部增長新元素並返回新數組的長度
四、Shift():刪除並返回數組頭部的元素
七、二維數組
一、什麼是二維數組
數組中的數組,在一個數組中的每一個元素又是一個數組
二、聲明二位數組
var names = [['aa','bb'],['cc',dd]];
names[0][1] = 'bb'
十、字符串-string
一、聲明字符串
一、var str1 = '字符串1';
二、var str2 = String(’字符串2‘);
三、var str3 = new String(’字符串3‘);
二、length-屬性
做用:返回當前字符串中字符的個數
三、經常使用函數-string API
一、大小寫轉換函數
一、toUpperCase():返回字符串的徹底大寫形式
二、toLowerCase():返回字符串的徹底小寫形式javascript
String.prototype.equalsIgnoreCase = function (str) { if (str == null) return false; return this.toLowerCase() === str.toLowerCase(); }; //定義字符串忽略大小寫比較的函數 "a".equalsIgnoreCase("A") //true
二、獲取指定位置的字符 或 Unicode碼
一、charAt(index):返回指定下標位置處的字符
二、charCodeAt(index)返回指定下標位置處的字符的Unicode碼(十進制)
三、檢索字符串
一、做用:查詢子字符串在指定字符串中的起始下標
二、函數
一、indexOf(value,fromIndex)
value:要查詢的子字符串
fromIndex:從哪一個位置處開始查,若是省略的話,則從頭查找
返回值:返回第一次出現子字符串的下標,若是爲找到,則返回-1
二、lastIndexOf(value,fromIndex)
做用:查找value最後一次出現的下標
注意:該函數的查找方式是從後向前找
fromIndex若是省略,則將從字符串的最後一個字符處開始檢索
示例:
'avcdbabcd'.lastIndexOf('cd',7)//7
說明:若是在下標爲7的位置上匹配到字符串的頭部,則會繼續向後面判斷剩餘部分是否能夠匹配到
四、截取子字符串
函數:substring(start,end)
做用:返回從start到end-1之間的子字符串,若是end省略表示截取到字符串的結尾
五、分割字符串
函數:split(seperator)
做用:將字符串,經過seperator拆分紅一個數組
六、模式匹配
一、做用:配合正則表達式來完成字符串的查找和替換...
二、正則表達式
語法:/正則表達式/修飾符
示例:/\d{6}/gim
修飾符:
i:忽略大小寫匹配(Ignorcase)
g:全局匹配(Global)
m:容許多行匹配(Multiple)
三、函數
一、replace(substr/regexp,replacement)
做用:使用replacement替換substr/regexp的內容,並返回一個替換後的字符串
二、match(substr/regexp)
做用:返回知足substr 或 regexp格式的字符串,將這些字符串放在數組中進行返回
三、serach(substr、regexp)
做用:返回知足substr或regexp格式的子字符串第一次出現的下標。如爲未找到,則返回-1
注意:search函數不支持全局匹配,將自動忽略g css
function combine(baseurl, pathname) { //bsaeurl是否以/結尾,pathname是否以/開始,拼接baseurl和pathname const separator = (/\/$/.test(baseurl) === false && /^\//.test(pathname) === false) ? '/' : '' return Array.prototype.slice.call(arguments, 0).join(separator) }
十一、其餘內置對象
一、JS的對象分類
一、內置對象—ES提供
String,Array,... ...
二、外部對象
一、window(BOM)瀏覽器對象
二、document(DOM)文檔對象
三、自定義對象
function 就是一個自定義對象
二、RegExp對象
RegExp:Regular Expression - 正則表達式
一、建立RegExp對象
一、var regExp = /匹配模式/修飾符;
二、var regExp = new RegExp(‘匹配模式’,‘修飾符’);
二、RegExp對象方法
一、regExp.test(string)
string:要驗證的字符串,若是string符合regExp格式的話,返回true,不然返回false
三、Math對象
一、做用:執行與數學相關的運算和數據
二、屬性:
Math.PI,
Math.E
三、函數
一、三角函數
Math.sin(x)
Math.cos(x)
Math.tan(x)
二、計算函數
Math.sqrt(x):開方
Math.log(x):對數
Math.pow(x,y):求x的有次方
三、數字比較函數
Math.abs(x):絕對值
Math.max():最大值
Math.min():最小值
Math.random():返回0-1之間的隨機小數,包括0但不包括1
Math.round(x):將x四捨五入
四、Date對象
一、建立Date對象
一、獲取當前系統日期時間
var now = new Date();
二、初始化自定義日期時間對象
var date = new Date(‘2018//01/01’);
二、函數
一、讀取或設置當前時間的毫秒數
一、getTime():返回自1900-1-1 00:00:00以來的毫秒數
二、setTime(毫秒數):
二、讀取時間份量函數
一、getFullYear():獲取日期時間對象的年份
二、getYear():獲取自1900年以來到當前日期時間對象所通過的年數
三、getMonth():返回0-11的數字來表示1-12月
四、getDate():返回當前日期對象對應的日
五、getDay():返回當前日期對象所對應的日期,0-6來表示星期日-星期六
六、獲取時間
一、getHourse():
二、getMinutes():
三、getSeconds();
四、getMilliseconds():獲取毫秒
七、轉換爲字符串
一、toString()
"Mon Aug 13 2018 12:14:38 GMT+0800 (CST)"
二、toLocaleString()
"2018/8/13 下午12:14:59"
三、toLocalTimeString()
"下午12:15:22"
四、tolocalDateString()
"2018/8/13"
十二、外部對象
一、BOM 和DOM
BOM:Browser Object Model-瀏覽器對象模型
DOM:Document Object Model-文檔瀏覽器對象模型
二、BOM
一、做用:表示瀏覽器窗口,BOM提供了一個核心對象-window
二、window對象的使用
window對象會包含若干屬性 和 方法
屬性:document,location,history,navigator,screen
方法:alert(),prompt(),...
調用window對象的屬性和方法時,能夠省略window.不寫
window中的對話框
一、警告框:window.alert()/ alert()
二、輸入框:window.prompt()/ prompt()
三、確認框:window.confirm()/ confirm,按‘確認‘按鈕的話,返回true,不然返回false
window中的定時器
一、定時器分類
一、週期性定時器:每隔必定時間就會執行一遍指定程序,返回執行
二、一次性定時器:在指定的時間間隔以後,只執行一次操做
二、週期性定時器
一、聲明定時器
var ret = setInterval(fun,time);
fun:要週期性執行的操做,能夠是匿名函數
time:時間間隔週期,以毫秒爲單位
ret:返回已經建立好的定時器對象(用於中止定時器)
二、清除定時器
clearInterval(timer)
timer:建立好的,要中止的定時器對象
三、一次性定時器
一、聲明一次性定時器
var ret = setTimeout(fun,time);
fun:指定時時間間隔後要執行的操做
time:時間間隔,以毫秒爲單位
ret:返回已經啓動的定時器對象
二、清除定時器
clearTimeout(timer);
timer:建立好的,要中止的定時器對象
Window的屬性(瞭解)
一、screen:獲取客戶端顯示器的相關信息
屬性:
一、width/ height
二、availWidth/ availHeight
二、history:
一、做用:包含當前窗口所訪問過的url地址
二、屬性 和方法
一、屬性
length:訪問過的URL的數量
二、方法
一、back():後退
二、forward():前進
三、go(num):去往歷史記錄中的第num個頁面
go(1)至關於forward
go(-1)至關於back
三、location
一、做用:表示瀏覽器地址欄上的信息
二、屬性和方法
一、href:表示當前窗口中正在瀏覽的網頁的地址,若是href設置值的話,則至關於瀏覽器頁面跳轉的功能
二、reload():從新加載當前頁面,等同於刷新
四、navigator
一、做用:包含瀏覽器的相關信息
二、屬性
一、userAgent:顯示瀏覽器相關信息("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0")
三、DOM-document對象(重點)
一、document的概述
document對象,是DOM中的頂級對對象。封裝了和HTML相關的屬性,方法和事件。
在網頁加載HTML的時候,會在內存中生成一棵節點樹(DOM樹),DOM樹的根就是document
每一個元素其實都是DOM樹上的一個節點
DOM中所提供的操做:
一、查找節點的信息
二、讀取節點的信息
三、修改節點的信息
四、刪除節點的信息
五、建立節點的信息
二、查找節點
一、經過元素的id查找節點
var elem = document.getElementById("元素ID");
元素ID:要獲取的元素的ID
elem:所獲得的元素的對象-DOM對象/元素,若是沒有找到匹配的元素,則返回null
DOM對象的經常使用屬性
一、innerHTML:獲取 或設置當前DOM對象的HTML文本值,會獲取標籤
二、innerText:獲取 或設置當前DOM對象的文本值,只獲取文本不獲取標籤
三、value:獲取 或設置表單控件對象的值
說明:value獲取的值只是表單控件框中輸入的值,設置值也只是設置表單控件框中的值,不會改變value的默認值
二、經過標籤名查詢
語法:document.getElementsByTagName(標籤名);或則 elem.getElementsByTagName(標籤名);
示例:
一、document>getElementsByTagName('p')//查找網頁中全部的p元素
二、var div = document.getElementById('d1');
div.getElementsByTagName('p')//查找id爲d1的div內部的p元素
返回值:由指定標籤元素所組成的數組(列表)
三、經過元素的name屬性值來查詢節點(優先使用在 單選框 和 複選框中)
語法:document.getElementsByName()
返回值:返回由指定name值的元素所組成的數組
四、經過元素class值查詢節點
語法:documnet.getElementsByClassName(className) 或 elem.getElementsByClassName(className)
返回值:由指定className值的元素組成的數組
五、根據節點的層級關係查詢節點
一、parentNode:返回當前元素的父節點
二、childNodes:返回當前元素的全部子節點組成的數組(子節點元素節點,屬性節點,文本節點(包括空格和回車)、註釋節點,文檔節點)
三、children:返回當前元素的子節點組成的數(子節點中只包含元素節點)
四、nextSibling:返回當前元素的下一個兄弟節點
五、nextElementSibing:返回當前元素的下一個兄弟元素節點
六、previousSibling:返回當前元素的上一個兄弟節點
七、previousElementSibling:返回當前元素的上一個兄弟元素節點
三、讀取節點的信息
一、節點的類型
一、元素節點:表示頁面上的一個元素
二、屬性節點:表示頁面上元素的一個屬性
三、文本節點:表示頁面上元素的一個文本內容(包含空格和回車)
四、註釋節點:表示網頁上的一個註釋
五、文檔節點:表示html文檔
屬性:nodeType
取值:
返回1:元素節點
返回2:屬性節點
返回3:文本節點
返回8:註釋節點
返回9:HTML文檔(文檔節點)
二、讀取節點名稱
屬性:nodeName
返回值:
元素節點 和屬性節點:返回元素名 或 屬性名
文本節點:#text
文檔節點:#document
註釋節點:#comment
四、獲取 或設置元素節點的方法
一、getAttribute(attrName)
做用:獲取某元素指定的屬性值
attrName:要獲取的屬性的名稱
返回值attrName屬性名對應的值
注意:獲取的屬性值,必需要在標籤中編寫出來,不然值爲null
二、setAttribute(attrName,attrValue)
做用:修改指定屬性的值
attrName:要修改的屬性的名稱
attrValue:要修改屬性名的值
說明:setAttribute("value","aa")只會改變value的默認值,若是此時表單控件框中有值是不會被修改的。與getAttribute()聯合使用,不要和value屬性混合使用。
三、removeAttribute(attrName)
做用:將attrName屬性從元素中刪除出去
練習:
一、網頁中建立一個a標記,內容爲 百度 ,連接地址爲https://www.baidu.com
二、網頁中建立一個按鈕,文本爲修改
三、點擊按鈕時,將超連接的文本修改成 騰訊,將超連接的地址修改成 http:www.qq.com
五、元素的樣式
一、使用setAttribute()設置class屬性值
elem.setAttribute(「class」,」類選擇器名稱「);
二、使用元素的className屬性修改class值
elem.className="類選擇器";
三、自定義元素樣式
elem.style.css屬性 = 值 ;
注意:若是CSS屬性名中包含-連字符的話,連字符要取消,而且-後面的第一個字符要變大寫
elem.style.color = 'red';
elem.style.fontSize = "18px";
elem.style.borderRightColor = 'yellow';
六、增長節點
一、建立元素節點
var elem = document.createElement(」元素名「);
elem:表示建立好的DOM元素
二、增長節點
一、document.boby.appendChild(elem):向body中追加新元素elem,在body中的最後一個元素
二、parentNode.appendChild(elem):將elem追加到parentNode的內部
parentNode:表示的是已經存在的一個元素
三、parentNode.insertBefore(newElem,oldElem)
將newElem元素插入到parentNode中oldElem以前
說明:建立一個元素節點,只能增長一次,不能屢次增長該元素
七、刪除節點:
刪除節點只能由父元素來發起
一、document.body.removeChild(elem):刪除body中的elem元素
二、parentNode.removeChild(elem):在parentNode中刪除elem元素
四、事件
一、什麼是事件:容許經過特殊的行爲來激發的操做
二、經常使用的事件
一、鼠標事件
一、click:鼠標單擊事件
二、mousevoer:鼠標進入元素時激發的事件
三、mousemove:鼠標在元素內移動時激發的事件
四、mouseout:鼠標從元素內移出時激發的事件
二、鍵盤事件
一、keydown:鍵位按下時的事件
二、keypress:鍵位按下時的事件
三、keyup:鍵位擡起時的事件
三、狀態改變事件
一、load:當元素加載完畢時觸發的事件
二、change:當元素髮生改變時觸發的事件,通常用在select下拉框中
三、focus:當元素獲取焦點時觸發的事件
四、blur:當元素失去焦點時觸發的事件
五、submit:當表單被提交時觸發的事件
注意:在爲html元素綁定事件時,必需要在事件名前加 on
三、綁定事件的方式
一、在元素中綁定事件
<button onclick=""></button>
<input onblur="">
二、在js中動態的爲元素綁定事件
<script>
var div = $("d1");
div.on事件名 = function(){
}
div.onclick = function(){
}
</script>
或者
<script>
function func(){
}
var div = $("d1");
div.on事件名 = func;
</script>
四、事件行爲詳解
一、load事件
經常使用場合:當網頁加載完畢時,要執行的操做
方式1:在元素中綁定事件
<body onload="函數()"></dody>
方式2:JS中動態綁定事件
<script>
window.onload = function(){
//網頁中其餘元素加載完畢時,纔會執行
var div = $("d1");
div.onclick = function(){
this:指的是綁定事件的元素
}
}
</script>
二、submit事件
功能:表單被提交時要觸發的事件
注意:經過一個boolean的返回值,通知表單是否被提交,返回值爲true能夠提交表單,爲false不能提交
<form onsubmit="return 函數()">
三、focus事件
功能:當元素獲取焦點時觸發的事件
四、blur事件
功能:當元素失去焦點時觸發的事件
五、事件對象(event對象)
一、什麼是事件對象
事件對象中封裝了事件中要用到的一些參數和一些操做
二、獲取事件對象(event對象)
一、html元素中綁定事件
<ANY onclick="btnClick(event)">//event表示事件對象,是實參,不可修改
<script>
function btnClick(event){
//event表示事件對象,是形參,此處event能夠修改,
}
</script>
二、使用JS動態綁定
<script>
d1.onclick = function(event){
}
</script>
三、事件對象的經常使用屬性
一、事件源:觸發當前事件的元素
獲取事件源:
經過event.target獲取事件源,返回DOM對象
二、鼠標事件
一、offsetX,offsetY
獲取鼠標在 元素上的座標,以元素的左上角(border內邊緣)爲(0,0)計算的
二、clientX,clientY
獲取鼠標在網頁上的座標,以網頁左上角爲(0,0)計算的
三、screenX,screenY
獲取鼠標在 顯示器上的座標點,以屏幕左上角爲(0,0)計算的
三、鍵盤事件
一、event.key
獲得按下鍵的字符
二、event.which :在keypress事件中 和在keydown事件中的含義不一樣
一、在keypress中
event.which:表示按下字符的ASCII碼
二、在keydown中
event.which:表示的是鍵位碼,只記錄鍵位,不記錄字符(大小寫英文字母的鍵位碼是相同的,一些數字和標點的鍵位碼有多是相同的)
四、事件冒泡
一、什麼是事件冒泡
當激發了子元素的事件時,把父元素對應的事件也一併給執行了
場合:
一、必須是父子元素或具有層級關係的元素
二、爲元素們設置了相同的事件
二、阻止事件冒泡
只讓事件在當前元素中執行,不向上冒泡
event.stopPropagation();
jQuery
一、jQuery的簡介
是一個輕量級的JS庫-是一個封裝好的JS文件。提供了更爲簡便的頁面元素操做方式。
封裝了 DOM,JS,CSS
核心理念: Write Less Do More
jQuery版本:
jQuery 3.3.1
jQuery 2.x:再也不支持IE6,7,8
jQuery 1.11.x
二、使用jQuery
一、引入jQuery文件
<script src='文件路徑'></script>
注意:引入文件的操做必須放在其餘jQuery操做以前
二、使用jQuery
三、jQuery對象
一、什麼是jQuery對象
jQuery對象是由jQuery對頁面元素進行封裝後的一種體現
jQuery中所提供的全部操做都只針對jQuery對象,其餘對象不能使用(如DOM對象)
二、工廠函數 - $()
想要獲取jQuery對象 或 轉換爲jQuery對象的話,就必需要使用工廠函數
三、DOM對象和jQuery對象之間的轉換
DOM對象:以DOM的方式獲取出來的節點對象,都是DOM對象,DOM對象只能使用DOM中所提供的方法和屬性,是不能訪問jQUery提供的屬性和方法
jQuery對象:有jQuery封裝而獲得的對象。jQuery對象只能訪問jQuery提供的屬性和方法,是不能訪問DOM提供的屬性和方法
一、將DOM對象轉換爲jQuery對象
語法:var $obj = $(DOM對象);
注意:在爲jQuery對象起名的時候,最好在變量名稱前 + $;
二、將jQuery對象轉換爲DOM對象
一、var dom對象 = jQuery對象.get(0);
二、var dom對象 = jQuery對象[0];
四、JS中建立對象(補充)
一、使用Object 直接建立對象
var newObj = new Object();
newObj.property = value1;//添加屬性
newObj.method1 = function(){
//添加無參方法
}
newObj.method2 =function(arg){
//添加含參方法
}
二、使用構造器建立對象
function 對象名(參數1,參數2,....){
//只能使用this來訪問或建立當前對象的成員
//使用參數爲屬性賦值
this.屬性1 = 參數1;
this.屬性2 = 參數2;
//建立方法
this.funName = function(){
}
}
使用對象
var obj1 = new 對象名(參數1,參數2,...)
三、使用JSON建立對象
一、什麼是JSON
JSON:JavaScript Object Notation - JS對象的表現形式
JSON一般會做爲輕量級的數據交換格式
JSON通常表示只有屬性沒有方法的對象
二、聲明JSON對象
一、使用鍵值對的方式來聲明數據,鍵表示該對象的屬性,值表示該對象的值
二、全部的屬性,必須用""雙引號引發來,若是值是字符串的話,也必須用""雙引號引發來,單引號有時很差用
三、屬性和值之間用:隔開
四、多對屬性之間用,隔開
五、JSON對象使用{}來表示
var person = {"name":"張無忌","age":25,"gender":"Male"}
五、jQuery選擇器
一、做用:獲取頁面上的元素們,返回jQuery對象所組成的數組
語法:$("選擇器");
二、選擇器的分類
一、基礎選擇器
一、ID選擇器
用法:$("#ID值")
說明:返回HTML中指定ID的元素
二、類選擇器
用法:$(".className")
說明:返回HTML中全部class爲className的元素
三、元素選擇器
用法:$("元素名稱")
說明:返回HTML中全部指定標記的元素
四、通用選擇器
用法:$("*")
說明:返回HTML中全部的元素
五、羣組選擇器
用法:$("selector,selector2,...")
說明:返回知足工廠函數內多有選擇器的元素
二、層級選擇器:
一、$("selector1 selector2"):後代選擇器
二、$("selector1 > selector2"):子代選擇器
三、$("selector1 + selector2"):相鄰兄弟選擇器
說明:匹配牢牢跟在selector1後面且知足selector2選擇器的元素,若是selector1緊後面的元素不知足selector2時,則找不到
四、$("selector1 ~ selector2"):通用兄弟選擇器
說明:匹配selector1後面且知足selector2選擇器的全部元素
三、過濾選擇器
一、基本過濾選擇器
一、:first:只匹配到一組元素中的第一個
二、:last:只匹配到一組元素中的最後一個
三、:not(selector):在一組元素中,將知足selector的元素排除出去
四、:odd:匹配 (奇數索引1,3,5,7,...)的元素
五、:even:匹配(偶數索引0,2,4,...)的元素
六、:eq(index):匹配下標等於index的元素
七、:gt(index):匹配下標大於index的元素
八、:lt(index):匹配下標小於index的元素
二、內容過濾選擇器
一、:contains(「text」):匹配包含指定文本的元素
二、:empty:匹配空元素(不包含任何子元素以及文本)
三、:has(selector):匹配含有指定選擇器的元素
四、:parent:匹配自己是父元素的元素
三、可見性過濾選擇器
一、:visible:匹配全部的可見元素
二、:hidded: 匹配全部不可見元素
四、狀態過濾選擇器
主要用在表單控件上
一、:enabled:匹配全部的可用元素
二、:disabled:匹配全部禁用元素
三、:checked:匹配全部被選中的元素(radio 和 checkbox)
四、:selected:匹配全部被選中的元素(select)
五、子元素過濾選擇器
一、:first-child:匹配屬於其父元素中的第一個子元素
二、:last-child:匹配屬於其父元素中的最後一個子元素
三、:nth-child(n):匹配屬於其父元素的第n個子元素
說明:n>=0的任意一個數,(n+1)表示大於0的任意整數,可是不能寫成(1+n),n須要寫在表達式以前
四、屬性選擇器
使用元素的屬性來匹配頁面的元素
一、[attr]:匹配具備attr屬性的元素
示例:$["id"]匹配全部具備id屬性的元素
二、[attr=value]:匹配attr屬性值爲value的元素
示例:匹配頁面中全部文本框
一、$(":text")
二、$("input[type='text']")
三、[attr!=value]
四、[attr^=value]:匹配attr屬性值是以value字符開始的元素們
五、[attr$=value]:匹配attr屬性值是以value字符結束的元素們
六、[attr*=value]:匹配attr屬性值中包含value字符的元素們
六、jQuery操做DOM
一、基本操做
一、html():等同於DOM中的innerHTML
做用:讀取或者設置jQuery對象中的HTML內容,無參數表示獲取,有參數表示設置
二、text():等同於DOM中的innerText
三、val():等同於DOM中的value
四、屬性操做
一、attr():
做用:讀取或設置jQuery對象的屬性值
示例:
一、$("#main").attr("id");:獲取id屬性值
二、$("#main").attr("class","redBack");:設置class屬性值爲reBack
二、removeAttr(attrName)
做用:刪除jQuery對象的指定屬性
二、樣式操做
一、attr("class","className"):爲元素動態綁定class屬性值
二、$obj.addClass("className"):追加類選擇器
$obj.addClass("c1").addClass("c2").addClass("c3").html('測試文本');
三、removeClass(」className「):刪除指定的類選擇器
四、removeClass():刪除全部的類選擇器
五、toggleClass(」className「):
樣式切換
元素若是具備className選擇器,則刪除
元素若是沒有className選擇器,則添加
六、hasClass(」className「):判斷元素是否包含className選擇器
七、css(」屬性「,」值「):爲元素動態的設置某css屬性和值
$obj.css("background-color",'red');
八、css(JSON對象)
$obj.css({
"color":"red",
"font-size":"32px",
});
三、遍歷節點
一、children() / children(selector)
獲取jQuery對象的全部子元素或帶有指定選擇器的子元素
注意:以考慮子代元素,不考慮後代元素
二、next()/ next(selector)
獲取jQuery對象的下一個兄弟元素或知足selector的下一個兄弟元素
三、prev() / prev(selcetor)
獲取jQuery對象的上一個兄弟元素或知足selector的上一個兄弟元素
四、siblings()/ siblings(selector)
獲取jQuery對象的全部兄弟元素 或知足selector的全部兄弟元素
五、find(selector)
查找知足selector選擇器的後代元素
六、parent()
查找jQuery對象的父元素
四、建立和插入節點
一、建立對象
語法:$("建立內容")
示例:$("<div>文本內容</div>");
二、插入節點
一、內部插入
一、$obj.append($new):將$new做爲$obj的最後一個子元素插入進來
二、$obj.prepend($new):將$new做爲$obj的第一個子元素插入進來
二、外部插入
一、$obj.after($new):將$new做爲$obj的下一個兄弟元素插入進來
二、$obj.before($new):將$new做爲$obj的上一個兄弟元素插入進來
五、刪除節點
一、remove()
語法:$obj.remove():刪除$obj元素
二、remove(「selector」): 按選擇器刪除元素
三、empty()
語法:$obj.empty():清空$obj中全部的內容
六、替換和賦值(非重點)
一、替換
一、replaceWith
語法:$old.replaceWith($new)
使用$new元素替換$old元素
二、replaceAll
語法:$new.replaceAll($lod)
使用$new元素替換$old元素
二、賦值
一、clone()
$new = $old.clone();
七、jQuery事件
一、頁面加載後執行
HTML頁面加載流程:
一、向服務器發送請求
二、接收服務器的相應
三、在內存中生成DOM樹
四、渲染-顯示內容到網頁上
五、執行window.onload
jQuery處理的時候
一、向服務器發送請求
二、接收服務器的相應
三、在內存中生成DOM樹
四、執行 加載後的 操做
五、渲染-顯示內容到網頁上
如何實現頁面加載後執行:
一、$(document).ready(function(){
//頁面的初始化操做,DOM樹加載完成後就開始執行
});
二、$().ready(function(){
//頁面的初始化操做,DOM樹加載完成後就開始執行
});
三、$(function(){
//頁面的初始化操做,DOM樹加載完成後就開始執行
});
二、jQuery實現事件的綁定
一、方式1
$obj.bind("事件名稱",function(){
//事件操做
//容許使用this來表示當前元素(dom對象)
});
$obj.bind("事件名稱",function(event){
//事件操做
//容許使用this來表示當前元素(dom對象),
//容許傳遞event對象,做爲事件對象
});
二、方式2
$obj.事件名(function(){
//事件操做
//容許使用this來表示當前元素(dom對象)
});
$obj.事件名(function(event){
//事件操做
//容許使用this來表示當前元素(dom對象)
//容許傳遞event對象,做爲事件對象
});
八、jQuery動畫
一、基本顯示 和 隱藏
語法:
顯示:$obj.show(); / $obj.show(duration);毫秒爲單位
隱藏:$obj.hide(); / $obj.hide(duration);毫秒爲單位
二、滑動式顯示 和 隱藏
語法:
顯示:$obj.slideDown() / $obj.slideDown(duration);毫秒爲單位
隱藏:$obj.slideUp() / $obj.slideUp(duration);毫秒爲單位
三、淡入淡出式顯示 和 隱藏
語法:
顯示:$obj.fadeIn() / $obj.fadeIn(duration);毫秒爲單位
隱藏:$obj.fadeOut() / $obj.fadeOut(duration);毫秒爲單位 html
九、jQuery插件java
http://www.jq22.comnode
一、下載插件並引入(jquery,插件文件,css文件)python
二、結合當前網頁修改cssjquery
三、去插件中修改數據(替換圖片/圖片名稱)正則表達式
十、jQuery循環數組
each()函數瀏覽器
方式1:
$(遍歷對象).each(function(下標,遍歷出來的數據){})
方式2:
$.each(遍歷對象,function(下標,遍歷出來的數據){})
說明:若是遍歷的是字典的話下標就表明 字典的鍵 ,遍歷出來的數據就是 字典的值
<body> <script src="/static/js/jquery-1.11.3.js"></script> <script> var arr = [ { "name":"xdl", "age": 20, "gender":"男", }, { "name":"gj", "age": 18, "gender":"女", }, ] $(arr).each(function(i,obj){ console.log(i+":"+obj.name); }) $.each(arr,function (i,obj){ console.log(i+":"+obj.name); }) </script> </body>
<!doctype html> <html> <head> <meta charset="utf-8"/> </head> <body> <a href="https://www.baidu.com/s?wd=">圖片</a> <a href="https://www.baidu.com/s?wd=">新聞</a> <script type="text/javascript"> <!--獲取全部的a標籤--> var as = document.getElementsByTagName("a") for(var i=0;i<as.length;i++){ <!--循環獲取a每一個標籤--> var a = as[i] <!--獲取a標籤的文本--> var text = a.innerText <!--獲取url--> var url = a.href <!--將原先的url與text文本拼接造成新的URL--> a.href = url+text alert(a.href) } </script> </body> </html>