// HTML嵌套:
// 元素标簽中綁定JS代碼:
// "<p onclick="js操作">文本</p>"
// 文檔嵌套:
// "<script type="text/javascript"> js操作 </script>"
// 外部連結:
// "<script src="外部.js檔案""> js操作 </script>"
// href:邊加載邊執行 src:加載完畢後執行
JS常用操作:
alert("hello wotld!"); 普通網頁彈窗
pormpt("please input"); 接受使用者輸入的彈窗
console.log("hello wotld"); 輸出到控制台
document.weite("<h1>Hello</h1>");
浏覽器可以解析字元串内的 HTML标簽
将标簽添加到body末尾 若事件方式會重寫網頁
var a = 15; 變量
const PI = 3.14; 常量 全大寫方式 聲明必須指派
方法:
var pi = 3.141592693975358;
pi.tofixed(2); 保留小數點後兩位 //3.14
var s = "Paris";
s.charCodeAt(2); 檢視r對應的Unicode編碼
var s = "張";
s.toString(); 轉換為十六進制
var s = "\u4e00"; 十六進制轉換為中文
"\u4e00" ~ "\u9fa5"; 中文的範圍
console.log(typeof s); 檢視變量s的資料類型
console.log(typeof(s));
轉移符:
\n:換行
\t:制表符
\':'
\":"
\\:\
基本資料類型:
number:
整數:
0~9 十進制
0~7 八進制 以0開頭 013
0~f 十六進制 以0x為字首 0x45
小數:
3.14 小數點計數法
1.5e3 指數/科學計數法
string:
所有引号引起來的字元串
boolean:
true = 1 真
false = 0 假
undefined:
所有聲明未指派的變量或通路對象屬性不存在時
null:
空類型
引用資料類型:
數組、函數、對象
資料類型轉換:
隐式轉換:
字元串與任何資料類型相加都等于字元串類型
boolean類型可以當number類型使用
強制轉換:
toString() 任意類型轉換為字元串類型
Number() 數字字元串轉換為number類型 失敗傳回NaN
parseInt() 解析數字開頭的字元串 遇到非整數(包括小數)停止 遇到小數隻取整數部分
parseFloat() 等同于parseInt隻解析小數部分 可以解析指數計數法
運算符:
指派運算符:=
算數運算符: + - * % 3 / 2
自增自減:
++ -- ++在後先使用後自增 ++在前先自增後使用(自減用法相同)
關系運算符:
> < >= <= == != === !==
數字與字元串比較:
先轉換為數字 失敗傳回NaN 結果為False
NaN 與任何資料做 != 都為 true 包括 NaN != NaN 結果為 true
NaN 與任何資料 除了!= 其他都為 false
字元串之間用Unicode碼比較
== != 等 不等:
先進行資料轉換後進行數值得比較
=== !== 全等/恒等 不全等/不恒等:
資料類型和值必須全部等
邏輯運算符:
! 非
&& 與
|| 或
位運算:
& 按位與
| 按位或
^ 按位異或
/*
資料交換
var a = 3;
var b = 5;
1.
var c = a;
a = b;
b = c;
2.
a = a + b; a += b;
b = a - b; b = a -b;
a = a - b; a -= b;
3.
a = a ^ b; a ^= b;
b = b ^ a; b ^= a;
a = a ^ b; a ^= b;
4.Python特有
a, b = b, a
*/
條件運算符:
單目運算符:
++ -- ! typeof -
雙目運算符:
+ - * % ^ && || & | ! = 等
三目運算符:
? : 相當于簡單版的 if-else 結構
流程控制:
if 語句:
if (條件) {
語句塊;
} else if{
語句塊2;
...
} else {
語句塊n;
}
switch 語句:
switch (變量) {
case 值1:
語句塊1;
break; //可以省略
case 值2:
語句塊2;
break;
...
default:
語句塊n; //想過與 if-else if 結構的else
}
while 循環:
while (條件) {
循環操作;
}
do...while循環(至少循環一次):
do{
循環操作;
}while(條件);
循環可以任意嵌套:外層走一次 内層走一輪
函數:
定義函數:
function 函數名(參數清單){
函數體
[ return 傳回值] //[]代表可省略
}
在任何可以書寫JS代碼的地方都可以調用
匿名函數:
function (參數清單) {
函數體
[return 傳回值]
}
為某個事件而生的 隻能用作與某個事件
作用域:
所有用 var 關鍵字聲明的變量都是目前作用域的變量
如果不使用 var 關鍵字聲明的變量都是全局變量
變量所在的并可被通路的區域叫做作用域
數組:
建立數組:
var arr = [];
var arr = ["a", "b", "c", 1, 2, 3];
var arr = new Array(5); //預設5個 undefined值 下标從5開始
var arr = new Array();
var arr = new Array("a", "b", "c", 1, 2, 3);
索引:
arr[2]; //"c"
arr[100]; // undefined
索引指派:
arr[arr.length] = 0; //清空數組
arr[2] = "F"; //["a", "b", "F", 1, 2, 3]
arr[100] = "張3"; //["a", "b", "F", 1, 2, 3, "張3"]
"張3"的下标為100 3 的下标為5 中間的下标為空值 取值傳回 undefined
擷取數組長度:
var len = arr.length;
數組常用的API:
var arr = [];
arr.toString(); 将數組轉換為字元串用“,”連結
arr.join(seperator); 傳回用seperator字元串連結的長字元串
arr.reverse(); 将數組元素翻轉 直接改變現有的數組
arr.sort(); 對數組進行排序預設按照Unicode碼排序 直接改變現有的數組
arr.sort(function); function: 排序函數
arr.sort(function(a, b) {return a - b});利用匿名函數升序排序
arr.sort(function(a, b) {return b - a});利用匿名函數降序排序
進出棧操作:
arr.push(element); 壓入 向數組的尾部添加新元素并傳回數組長度
arr.pop(); 彈出 删除數組中的最後一個元素并傳回删除的内容
arr.unshift(element); 向數組頭部添加一個新的元素并傳回長度
arr.shift(); 删除數組頭部的第一進制素并傳回删除的内容
二維數組:
建立二維數組:
var names = [
[1, 2, 3, 4, "a", "b"],
["a", "b", 3, 4, 5, 6]
];
字元串:
聲明字元串:
var str = "字元串";
var str = String("字元串");
var str = new String("字元串");
擷取字元串長度:
str.length;
字元串常用API:
str.toUpperCase(); 傳回完全大寫字元串
str.toLowerCase(); 傳回完全小寫字元串
str.trim(); 傳回去掉字元串兩側空格後的内容
str.charAt(index); 傳回字元串内下标為index的字元
str.split(seperator); 傳回用seperator字元串拆分後的數組
str.charCodeAt(index); 擷取指定字元的Unicode碼
str.indexOf(value, fromIdex);
value:
要查找的字元串
fromIndex:
開始位置
傳回值:
傳回第一次出現的字元串 沒有傳回-1
str.lastIndexOf(value, fromIdex);
value:
查找的字元
fromIndex:
開始位置
傳回值:
傳回最後一次出現的字元串 沒有傳回-1
str.substring(startm, end);
startm:
開始位置
end:
結束位置
傳回值:
傳回 startm~end-1 截取到的字元串
str.relplace(substr/regexp, replacement);
substr/regexp:
正規表達式/修飾符
replacement:
要替換的字元串
傳回值:
傳回替換後的字元串
str.match(substr/regexp);
substr/regexp:
正規表達式/修飾符
傳回值:
傳回滿足比對條件的字元串格式
内置對象:
RegExp對象:
建立:
var reg = /正規表達式/修飾符;
var reg = new RegExp("比對模式", "修飾符"); //裝飾符可以省略
修飾符:
i: ignorecase (忽略大小寫)
g: global (全局比對)
m: multiple (允許多行比對)
方法:
test(string);
string:
要驗證的字元串
傳回值:
如果能夠比對到string傳回true否則傳回false
Math對象:
屬性:
Math.PI;
Math.E;
方法:
三角函數:
Math.sin();
Math.cos();
Math.tan();
計算函數:
Math.sqrt(); 開平方
Math.log(); 求對數
Math.pow(x, y); 求x的y次方
數值函數:
Math.abs(x); 絕對值
Math.max(a, b, c); 求最大
Math.min(a, b, c); 求最小
Math.random(); 随機數(0~1)
Math.round(x); 将x四舍五入
Date對象:
擷取目前日期:
var date = new Date();
建立自定義時間對象:
var date = new Date("2018-9-12 12:00:00");
方法:
date.getTime(); 傳回1970-1-1 00:00:00 到date所經過的毫秒
date.setTime(ms); 傳回根據給定的毫秒結合1970計算日期
date.getFullYear(); 傳回date對象對應的年
date.getYear(); 傳回1970至date時間所進過的年
date.getMonth(); 傳回0~11 表示1~12 月 0 代表一月
date.getDate(); 傳回date對象所對應的日
date.getDay(); 傳回date對應的是星期幾
date.getHours(); 傳回date對應的小時
date.getMinutes(); 傳回date對應的分鐘
date.getSeconds(); 傳回date對應的秒
date.getMilliseconds(); 傳回date對應的毫秒
date.toString(); 傳回date轉換後的标準時期字元串
date.toLocaleString(); 傳回date轉換後的本地時間日期字元串
date.toLocaleTimeString(); 傳回date轉換後的(時分秒)被轉換後的字元串
date.toLocaleDateString(); 傳回date轉換後的(年月日)被轉換後的字元串
外部對象:
window對象(BOM模型)
window.alert(); 警告框
window.potmpt(); 輸入框
window.console.log(); 終端輸出
window.confirm(); 确認框
window.setInterval(fun, time);
fun:
函數 要周期執行的操作 可以是匿名函數
time:
要間隔的時間 以毫秒為機關
ret:
傳回值 傳回周期定時器對象
window.clearInterval(obj); 清除周期定時器對象
window.setTimeout(fun, time); 傳回一次性定時器對象
window.clearTimeout(obj); 清除一次性定時器對象
window.screen; 擷取顯示器的相關資訊
window.screen.width; 螢幕的寬度
window.screen.height; 螢幕的高度
window.screen.availwidth; 可用的寬度
window.screen.avalheight; 可用的高度
window.history; 擷取目前視窗URL的位址
window.history.length; 目前視窗所通路過的URL數量
window.back(); 前進
window.forward(); 後退
window.go(number); 前進或後退number步 負數代表後退
window.location; 表示浏覽器位址欄資訊
window.location.href; 目前視窗浏覽的網址 為其指派可以實作網頁跳轉
window.reload(); 重新加載目前網頁 相當于重新整理
window.navigator; 浏覽器的相關資訊
window.userAgent; 顯示浏覽器的相關資訊
... 一系列沒屌用的資訊
window.document; 真正的大佬來了 上面的都是弟弟 都是弟弟行為
走丢了...
document 對象/屬性(DOM模型 window.document;)
DOM樹:
網頁加載後在記憶體中形成的節點樹 節點:每一個文本、元素、屬性
直接操作記憶體實作網頁的同步變化
查找元素節點:
var elem = window.document.getElementById("元素id");
window 可以省略不寫 包括上面所有的window
傳回值:
傳回對應id的元素 在js中的表現形式(DOM對象)
DOM對象屬性:
elem.innerHTML; 擷取或修改(指派)DOM對象的HTML文本(隻對雙标記)
elem.innerText; 擷取或修改(指派)DOM對象的普通文本(隻對雙标記)
elem.value; 擷取和設定表單控件的值(隻針對表單控件)
讀取節點資訊:
elem.nodeType;
傳回值:
1:元素節點
2:屬性節點
3:文本節點
8:注釋節點
9:文檔節點
elem.nodeName;
傳回值:
标簽名: 元素節點
屬性名: 屬性節點
#text: 文本節點
#document: 文檔節點
#comment: 注釋節點
設定或擷取節點的屬性:
elem.getAttribute("attrName");
attrName:
要擷取的屬性名稱
傳回值:
對用屬性的值
elem.setAttribute("attrName", "attrValue");
attrName:
要是設定的屬性名
attrValue:
要設定的屬性值
elem.removeAttribute("attrName");
attrName:
要删除的屬性名
查詢節點:
document.getElementById("idName"); 根據id查找節點
elem.parentNode; 傳回目前節點的父節點
elem.childNodes; 傳回目前節點的所有子節點(數組)
elem.children; 傳回目前節點的所有子"元素"節點(數組)
elem.nextSibling; 傳回目前節點的下一個兄弟節點
elem.nextElementSibling; 傳回目前節點的下一個兄弟"元素"節點
elem.previousSibling; 傳回目前節點的上一個兄弟節點
elem.previousElementSibling; 傳回目前節點的上一個兄弟"元素"節點
document/elem.getElementByTagName("标簽名");
document:
整個文檔内查找
elem:
某個元素内查找
傳回值:
指定标簽的數組
document.getElementsByName("Name屬性值");
傳回值:
name屬性的值為Name屬性值得所有元素的數組
document/elem.getElementsByClassName("class屬性值");
傳回值:
包含指定class屬性值得所有元素的數組
增加節點:
建立節點:
var text = document.createTextNode("文本内容");
建立文本節點 文本節點可以添加到元素中
var elem = document.createElement("标簽名");
傳回值:
建立好的元素
例如:
var div = document.createElement("div");
div.setAttribute("id", "contarner");
div.innerHTML = "動态建立的元素文本";
div.style.color = "red";
div.style.fontWeight = "bold";
增加節點:(由父元素節點發起)
document.body.appendChild(elem); 将元素追加到body中
parentNode.appendChild(elem); 将元素追加到parentNode(父元素節點)中
parentNode.insertBefore(newElem, oldElem);
parentNode:
父元素節點
newElem:
要插入的心元素節點(插入到舊節點前)
oldElem:
父元素中已有的元素節點
删除節點:
parentNode.removeChild(elem);
parentNode:
父元素節點(删除節點隻能由我(父元素節點)發起
沒有辦法 就是這麼強大 哈哈哈哈~)
elem:
要删除的元素節點
事件:
所有事件前面綁定時都必須加 on 例如:click --> onclick
click:
當滑鼠單擊時觸發該事件
dbclick:
當滑鼠輕按兩下時觸發該事件
mouseover:
當滑鼠移入元素時觸發的事件
mouseout:
當滑鼠移出元素時觸發的事件
mousemove:
當滑鼠在元素内移動時的事件
keydown:
當鍵盤鍵位按下時觸發的事件
keypress:
當鍵盤鍵位按下時觸發的事件
keyup:
當鍵位擡起時所觸發的事件
load:
當元素加載完成時所觸發的事件(body)
change:
當元素内容發生變化時所觸發的事件(select)
input:
當元素内容發生變化時所觸發的 實時同步事件
focus:
當元素擷取焦點時所觸發的事件(輸入框類)
blur:
當元素失去焦點時所觸發的事件(輸入框類)
submit:
當表單被送出時觸發的事件
事件綁定:
标簽綁定:
"<标簽名 on事件名=“觸發操作”></标簽名>"
動态綁定:
DOM對象.on事件名 = function() {}; 觸發匿名函數操作
在JS綁定事件中
允許使用this來表示觸發目前元素事件的DOM對象
必須是在匿名函數内才可以這麼寫
事件行為:
load:(通常為body添加)
1."<body onload="function"></body>"
2. window.onload = function{
網頁加載後自行的操作
通常為避免某些對象或屬性由于書寫順序拿不到的問題
}
submit:(表單送出)
表單對象.onsubmit = function() {
return true; 允許送出
return false; 不允許送出
}
change:
主要用于下拉清單
DOM對象.onchange = function() {
每次當選項發生改變時就會激發一次該事件
}
事件對象 event:
任何事件出發後 都會産生一個event對象
預設自動建立 想調用就當參數傳入 不想就省略
擷取event對象:
1.HTML元素中綁定事件
<元素名 on事件名=“btnClick(event)”></元素名>
<script>
function btnClick(event) {
event 表示就是事件對象
}
</script>
2.JS動态綁定事件:
var d1 = document.getElementById("d1");
d1.onclick = function(event) {
event表示的就是事件對象
}
事件源:
擷取事件源:
event.target;
得到的是一個DOM對象
在JS綁定事件中 事件源等同于 this
滑鼠事件屬性:
mouseover,mouseout,mousemove,click
1.offsetX,offsetY
擷取滑鼠在元素上的坐标點(元素內容區的左上角為0,0 點)
鍵盤事件屬性:
keydown,keypress,keyup
keydown,keypress事件中允許增加傳回值
通知浏覽器是否正常處理按下的字元 true正常顯示 false不顯示字元
keydown:
隻要按下鍵位就觸發不管有沒有輸出
which屬性:
按下鍵位的鍵位碼
keypress:
隻有按下輸出鍵時才會觸發
which屬性:
輸出的字元的ASCII碼
keyup:
隻要按下任意鍵并擡起就會觸發
事件冒泡:
什麼是事件冒泡?
例如有三層的div嵌套
分别綁定onclick事件
當點選最外層元素時執行最外層的onclick事件
當點選内層的元素時依次向外成執行 有多少成執行多少次
像冒泡似的執行代碼 就是事件的冒泡
阻止事件冒泡:
event.stopPropagation();
隻能阻止一層事件冒泡