19 Javascript、事件三部曲、事件、變數、操作表單內容、操作閉合標籤內容、變數拼接、操作屬性、操作樣式
19 Javascript、事件三部曲、事件、變數、操作表單內容、操作閉合標籤內容、變數拼接、操作屬性、操作樣式
js的歷史
javascript
為了處理表單的驗證
1995年,網景公司 布蘭登·艾奇 10天 Mocha
9月 LiveScript
12月 java的順風車 javascript
微軟: JScript
1997年 js1.1 為藍本 歐洲計算機制造商協會 ECMAScript
js和ECMAScript的關係:
ECMAScript規定了javascript的語法標準
javascript是ECMAScript的體現
js的概念
js是基於物件和事件驅動的解釋性指令碼語言;
特點
2.1 基於物件: 頁面中所有的內容 自己建立的物件都可以來直接用
一切皆物件 萬物皆物件
2.2 事件驅動: 瀏覽器會直接對使用者或者是客戶端的行為進行一個響應
2.3 解釋性: 瀏覽器可以直接執行js程式碼
2.4 跨平臺性: 只要有瀏覽器就可以執行
組成部分
ECMAScript 語法標準
DOM Document Object Model 文件物件模型
BOM Browser Object Model 瀏覽器物件模型
引入方式
行內
基於事件 通過事件進行觸發
第一個滑鼠事件: onclick
onclick="alert('hello js')"
缺陷: 單個事件的簡單的程式碼觸發 不推薦使用
<div style="width: 100px;height: 100px;background: red;" onclick="alert('hello js')">這是一個div</div>
內嵌
內嵌: script 雙標籤 可以寫在頁面的任何位置 也可以有多個
執行: 從上到下執行 遇到script標籤就會去執行其中的程式碼 其中程式碼執行完成後,才會往後執行
建議: body的結束標籤之前
沒有遵循三分離
常用: 學習 授課 結構和行為一一對應
w3c:
實現分離: html--結構 css--樣式 js--行為
<script>
alert('3');
</script>
外鏈
-
有js檔案 字尾.js
-
script 雙標籤 src地址屬性引入對應的檔案地址
-
js檔案中 直接寫程式碼
推薦使用: 開發過程中
注意: 在外鏈的js中,如果再寫程式碼 不會執行
<script src="./06.js">
// 在外鏈的js中,如果再寫程式碼 不會執行
alert('2');
</script>
註釋
-
行註釋 //
-
塊註釋 /* 註釋程式碼 */
除錯語言
alert
alert('內容')
作用: 彈出提示內容
阻斷頁面
alert('hello js')"
console.log
console.log('內容') 在控制檯輸入內容
console.log(值1, 值2, 值3, ... ); 可以同時輸出在控制檯
// 滑鼠移動
document.getElementById('box').onmousemove = function(){
// alert('onmousemove');
console.log('onmousemove');
}
事件三部曲
-
找 找到是誰來觸發 滑鼠操作誰就找誰
通過id:
document.getElementById('id名')
object HTMLDivElement---獲取成功 將box從頁面中拿到js中來使用
null---獲取失敗 檢查單詞 檢查大小寫
document--文件
get--獲取
Element--元素
ById---通過id
-
新增事件 滑鼠操作誰就加給誰
語法: 元素.事件 = function(){}
onclick
-
具體做的事情:
function後面的{}中
// 1. 找
alert(document.getElementById('box'));
// alert(document.getElementById('box1'));
// 2. 加事件
document.getElementById('box').onclick = function(){
// 3. 具體的事情
alert('1');
}
window.onload
執行順序: 程式碼從上往下執行 執行到script標籤的時候 body還沒有執行 頁面中還沒有元素 獲取不到box
Cannot set property 'onclick' of null: 不能把onclick這個屬性加給null
元素沒有獲取到
window.onload作用: 等待頁面及資源載入完成後, 在執行其中的程式碼
window.onload = function(){
所有程式碼
}
window.onload = function () {
// 1. 找
alert(document.getElementById('box'));
// alert(document.getElementById('box1'));
// 2. 加事件
document.getElementById('box').onclick = function () {
// 3. 具體的事情
alert('1');
}
}
事件
-
點選事件 onclick
-
雙擊事件 ondblclick
-
滑入事件 從元素外面進入到元素裡面 onmouseover onmouseenter
-
滑出事件 從元素裡面出去到元素外面 onmouseout onmouseleave
-
滑鼠按下 onmousedown
-
滑鼠抬起 onmouseup
-
右鍵選單 oncontextmenu
-
滑鼠移動 onmousemove 一直不間斷觸發
// 找元素
// alert(document.getElementById('box'));
// 加事件 元素.事件 = function(){}
document.getElementById('box').onclick = function(){
// 具體做的事情
alert('單擊');
}
// 加事件 元素.事件 = function(){}
document.getElementById('box').ondblclick = function(){
// 具體做的事情
alert('雙擊');
}
// 滑入滑出
// 滑入
document.getElementById('box').onmouseover = function(){
// 具體做的事情
alert('mouseover');
}
document.getElementById('box').onmouseenter = function(){
// 具體做的事情
alert('mouseenter');
}
// 滑出
document.getElementById('box').onmouseout = function(){
// 具體做的事情
alert('mouseout');
}
document.getElementById('box').onmouseleave = function(){
// 具體做的事情
alert('mouseleave');
}
// 按下
document.getElementById('box').onmousedown = function(){
alert('mousedown');
}
// 抬起
document.getElementById('box').onmouseup = function(){
alert('mouseup');
}
// 右鍵選單
document.getElementById('box').oncontextmenu = function(){
alert('contextmenu');
}
// 滑鼠移動
document.getElementById('box').onmousemove = function(){
// alert('onmousemove');
console.log('onmousemove');
}
over與enter區別
over與enter的區別: over會用子元素觸發父元素身上的事件 enter不會
document.getElementById('box').onmouseover = function(){ console.log('over'); } document.getElementById('box').onmouseenter = function(){ console.log('enter'); } document.getElementById('box').onmouseout = function(){ console.log('out'); } document.getElementById('box').onmouseleave = function(){ console.log('leave'); }
變數
概念
變數:用來儲存資料的容器
用關鍵字 var 宣告
宣告方式
-
先宣告,後賦值;
var 變數名; 變數名 = 值;
-
宣告的同時並賦值;
var 變數名 = 值;
-
同時宣告多個;
var 變數名1, 變數名2, ...;
變數名1 = 值1;
變數名2 = 值2;
-
同時宣告多個的同時並賦值;
var 變數名1 = 值1, 變數名2 = 值2, ...;
// 先宣告 後賦值 var box; box = 1; console.log(box); // 宣告的同時並賦值 var obox = 2; console.log(obox); // 同時宣告多個 var a,b,c; a = 10; b = 20; c = 30; // console.log(a); // console.log(b); // console.log(c); console.log(a, b, c); // 同時宣告多個並賦值 var x = 30, y = 40, z; z = 50; console.log(x, y);
命名規範
命名規範:
\1. 由字母、數字、_、$組成, 數字不能夠開頭的
\2. 不能使用關鍵字和保留字 top
\3. 不能重複, 重複的話 後面的會覆蓋前面的
建議:
\1. 具有語義化 userName password isLogin
\2. 遵循小駝峰命名法 多個單片語成一個變數名, 從第二個單詞開始首字母大寫 userName
// continue; // break; // case var top = 10; console.log(top); // 得不到10 var abc = 20; var abc = 40; console.log(abc); // 40
場景
-
用來儲存元素 元素有多個地方用到的時候 將元素儲存到一個變數中 只獲取一次元素 多次操作
-
需要儲存資料的時候
操作表單內容
-
獲取表單內容: var 變數名 = 元素.value;
-
設定表單內容: 元素.value = '要設定的內容';
-
注意:
-
步驟:先獲取元素 在獲取/設定內容
-
獲取下拉列表的值 沒有value屬性的情況下 獲取到的是option中的內容,如果有value 獲取的就是value的值
-
設定下拉列表的值 有value寫value的值 沒有value就寫option的內容 值與選中的項必須一模一樣 不一樣的話就選不中出現空白
-
// 獲取表單內容 // 1. 獲取元素 var inp = document.getElementById('inp'); console.log(inp); // 2. 獲取表單的值 內容 var inpValue = inp.value; console.log(inpValue); // 3. 設定表單內容 inp.value = '古力娜扎'; // 獲取文字域的值 var txt = document.getElementById('txt'); console.log(txt); var txtValue = txt.value; console.log(txtValue); // 設定文字域的值 txt.value = '這是古力娜扎的私人領域'; // 獲取下拉列表的值 沒有value屬性的情況下 獲取到的是option中的內容 // 如果有value 獲取的就是value的值 var city = document.getElementById('city'); console.log(city); var cityV = city.value; console.log(cityV); // 設定下拉列表的值 // city.value = 'gz '; // option中的內容 還是value的內容 有value寫value的值 沒有value就寫option的內容 值與選中的項必須一模一樣 不一樣的話就選不中出現空白 city.value = 'gz';
操作閉合標籤內容
閉合標籤: 雙標籤 有起始標籤有結束標籤就是閉合標籤
閉合標籤的內容: 起始標籤和結束標籤中間
innerText
獲取閉合標籤的內容:
var 變數名 = 元素.innerText;
設定閉合標籤的內容:
元素.innerText = '值';
// 獲取內容 先獲取元素 var box = document.getElementById('box'); console.log(box); var txt = box.innerText; // box.innerText; // 不會報錯 沒有任何作用 既沒有輸出在控制檯 也不會顯示在頁面中 console.log(txt); // 設定box的內容為: 新的內容 box.innerText = '新的內容';
innerHTML
獲取閉合標籤的內容:
var 變數名 = 元素.innerHTML;
設定閉合標籤的內容:
元素.innerHTML = '值';
// 獲取ul的內容 var oul = document.getElementById('oul'); console.log(oul); var oulHTML = oul.innerHTML; console.log(oulHTML); // 設定ul的內容 oul.innerHTML = '新的內容';
區別
-
都是獲取閉合標籤的內容,innerText不能獲取標籤 innerHTML可以獲取標籤
-
都可以設定閉合標籤的內容 innerText不識別標籤的 innerHTML可以識別標籤
-
設定內容的時候 後面的會覆蓋前面的
不想覆蓋 累加
語法:元素.innerHTML = 元素.innerHTML + '新的內容';
var oulHTML = oul.innerHTML; console.log(oulHTML); var oulTxt = oul.innerText; console.log(oulTxt); // 設定ul的內容 // oul.innerHTML = '新的內容'; // oul.innerHTML = '<li>新的內容</li>'; // oul.innerText = '<li>新的內容</li>'; // 累加: 語法:元素.innerHTML = 元素.innerHTML + '新的內容'; oul.innerHTML = oul.innerHTML + '新的內容'; oul.innerHTML = oul.innerHTML + '<li>新的內容</li>';
變數拼接
-
刪除 被替換的內容刪除掉
-
加 加兩個引號(與最外層引號一致) 以及兩個加號
-
拼接 在加號中間 加上變數名
// 變數不能直接寫在引號中 相當於是英文字元 而不是變數 // 變數拼接: 1. 刪除 被替換的內容刪除掉 2. 加 加兩個引號(與最外層引號一致) 以及兩個加號 3. 拼接 在加號中間 加上變數名 oul.innerHTML = oul.innerHTML + '<li>' + txt + '</li>';
操作屬性
屬性: 寫在起始標籤上 除了起始標籤名以外的都是屬性
操作屬性:
\1. 獲取屬性: var 變數名 = 元素.屬性名;
var 變數名 = 元素['屬性名']; var 變數名 = 元素[變數];
\2. 設定屬性: 元素.屬性名 = '值';
元素['屬性名'] = '值'; 元素[變數] = '值';
點和[]的區別: []裡面可以是變數 可以是'屬性名' 點後面只能是屬性名
操作id
\1. 獲取屬性: var 變數名 = 元素.id;
\2. 設定屬性: 元素.id = '值';
var div = document.getElementById('abox'); console.log(div); var txt = div.id; console.log(txt); var btn = document.getElementById('btn'); console.log(btn); // 加事件 btn.onclick = function(){ // 具體做的事情 元素.屬性名 = '值'; div.id = 'bbox'; }
操作class
\1. 獲取屬性: var 變數名 = 元素.className;
\2. 設定屬性: 元素.className = '值';
class: 是關鍵字 所以不能直接用
需要用 className
場景:
\1. 修改多個樣式 2個以上
\2. 樣式跟隨滑鼠改變 點選div讓div的背景色變藍 點選其他按鈕讓某個元素的樣式改變
var div = document.getElementById('abox'); console.log(div); // var txt = div.class; 錯誤 var txt = div.className; console.log(txt); // 設定類名 div.className = 'ab';
操作src
\1. 獲取屬性: var 變數名 = 元素.src;
\2. 設定屬性: 元素.src = '值';
絕對地址: 以碟符為開頭
file:///E:/%E4%B8%AD%E5%85%AC%E6%95%99%E8%82%B2/1207/day01/img/1.jpg
相對地址:
./ 同一個
../ 上一個
// 獲取元素 var img = document.getElementById('img'); console.log(img); // 獲取src的值 var txt = img.src; console.log(txt); // file:///E:/%E4%B8%AD%E5%85%AC%E6%95%99%E8%82%B2/1207/day01/img/1.jpg 沒用 var txt1 = img['src']; console.log(txt1); var a = 'src'; console.log(a); var txt2 = img[a]; console.log(txt2); // 設定的時候寫相對地址 // 點選img 改變img為第二張圖 img.onclick = function(){ // img.src = './img/2.jpg'; // img['src'] = './img/3.jpg'; var a = 'src'; img[a] = './img/4.jpg'; }
操作樣式
單個屬性操作
修改style屬性的某一個屬性
操作樣式屬性: 只能操作行內
\1. 獲取樣式屬性: var 變數名 = 元素.style.屬性名;
\2. 設定樣式屬性: 元素.style.屬性名 = '值';
在js中 沒有連字元 轉換成駝峰命名法 font-size ---> fontSize
var box = document.getElementById('box'); console.log(box); var w = box.style.width; console.log(w); // 空 box.style.width = '300px'; box.style.background = 'blue'; box.style.height = '300px';
多個屬性操作
\1. 獲取: var 變數名 = 元素.style.cssText;
\2. 設定: 元素.style.cssText = '值';
值:寫的樣式,樣式的語法與css中語法一致 width:100px; font-size: 21px;
直接給style賦值, 原先寫在行內的樣式就會被覆蓋掉
var box = document.getElementById('box'); console.log(box); // 批量操作樣式 var txt = box.style.cssText; console.log(txt); // 設定樣式 box.style.cssText = 'width:300px; height: 300px; font-size: 40px; color: #fff;background: black;';