05-JavaScript基礎(chǔ)[Python]

一惨缆、javascript組成

JavaScript由三部分組成:
1. 核心(ECMAScript)
2. 瀏覽器對象模型(BOM)
3. 文檔對象模型(DOM)

ECMAScript:是一種由ECMA國際(前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì),英文名稱是European Computer Manufacturers Association)通過ECMA-262標(biāo)準(zhǔn)化的腳本程序設(shè)計(jì)語言。ECMAScript 定義的只是這門語言的基礎(chǔ)纤虽,他的組成部分有:語法京革、類型绳泉、語句冠跷、關(guān)鍵字合是、保留字衫樊、操作符飒赃、對象等

BOM: Browse Object Model, 瀏覽器對象模型,提供與瀏覽器交互的方法和接口(API ), 開發(fā)人員使用BOM可以控制瀏覽器顯示頁面以外的部分.

DOM: Document Object Model, 文檔對象模型科侈,提供訪問和操作網(wǎng)頁HTML內(nèi)容的方法和接口

二载佳、BOM

  • window對象
    BOM的核心是window對象(全局),window對象的方法:
    alert(text): 彈出提示框(警告框)
    confirm(): 創(chuàng)建一個(gè)需要用戶確認(rèn)的對話框
    open(url,[options]) : 打開一個(gè)新窗口并返回新 window 對象(默認(rèn)新建,_self當(dāng)前窗口; 調(diào)用window對象close方法即關(guān)閉窗口)

  • location對象
    location.href = 'http://www.baidu.com' //跳轉(zhuǎn)到指定的URL
    location.assign('http://www.baidu.com'); //跳轉(zhuǎn)到指定的URL
    location.reload(); //最有效的重新加載,有緩存加載

三臀栈、DOM

  • DOM的概念
    DOM就是Document Object Model(文檔對象模型)的縮寫蔫慧,DOM 是 W3C(萬維網(wǎng)聯(lián)盟)的標(biāo)準(zhǔn)。
    DOM是中立于平臺和語言的接口权薯,它允許程序和腳本動(dòng)態(tài)地訪問和更新文檔的內(nèi)容姑躲、結(jié)構(gòu)和樣式。

HTML(頁面結(jié)構(gòu)) CSS(頁面樣式) JavaScript(頁面行為操作)

  • 節(jié)點(diǎn)樹
    加載HTML頁面時(shí)盟蚣,web瀏覽器生成一個(gè)樹形結(jié)構(gòu)黍析,用來表示頁面內(nèi)部結(jié)構(gòu)。DOM將這種樹形結(jié)構(gòu)理解為由節(jié)點(diǎn)組成:


    節(jié)點(diǎn)樹

上圖樹形結(jié)構(gòu)屎开,html標(biāo)簽阐枣,沒有父輩,沒有兄弟奄抽,所以html標(biāo)簽為根標(biāo)簽蔼两。head標(biāo)簽是html的子標(biāo)簽,meta和title標(biāo)簽是兄弟關(guān)系逞度。如果把每個(gè)標(biāo)簽當(dāng)作一個(gè)節(jié)點(diǎn)额划,那么這些節(jié)點(diǎn)組合成的就是節(jié)點(diǎn)樹。

  • 節(jié)點(diǎn)種類
    元素節(jié)點(diǎn)第晰、文本節(jié)點(diǎn)锁孟、屬性節(jié)點(diǎn);
  <div id="box">測試Div</div>
  元素節(jié)點(diǎn): div
  屬性節(jié)點(diǎn): id="box"
  文本節(jié)點(diǎn): 測試Div
  • 元素節(jié)點(diǎn)對象的獲取方式
- getElementById(): 獲取特定ID元素的節(jié)點(diǎn)對象(返回一個(gè)對象)
- getElementByClassName():  獲取指定類名的元素節(jié)點(diǎn)列表(返回一個(gè)數(shù)組)
- getElementsByTagName():  獲取指定標(biāo)簽名的節(jié)點(diǎn)列表(返回一個(gè)數(shù)組)
- getElementsByName():  獲取相同name屬性值的節(jié)點(diǎn)列表(返回一個(gè)數(shù)組)

錯(cuò)誤提醒: 如果id值存在, 但是返回null,則是執(zhí)行順序的問題茁瘦!
  解決方式一: 把<script>標(biāo)簽(JS代碼)移到html結(jié)構(gòu)后面品抽;
  解決方式二: 使用onload事件來處理, onload事件會(huì)在html加載完畢后再調(diào)用甜熔。 
   window.onload=function() {      
       document.getElementById('box');  //id具有唯一性
   };
  • 元素節(jié)點(diǎn)的屬性
    tagName: 元素節(jié)點(diǎn)對象所指向的標(biāo)簽名稱
    innerHTML: 元素節(jié)點(diǎn)中的內(nèi)容
    className: 元素節(jié)點(diǎn)的class屬性值
    style: css內(nèi)聯(lián)樣式對象
    children: 某元素的所有子元素節(jié)點(diǎn)
    parentNode: 某元素的父節(jié)點(diǎn)
    value: 輸入框的內(nèi)容

練習(xí): 實(shí)現(xiàn)一個(gè)個(gè)人信息頁面 姓名 年齡 學(xué)歷 專業(yè), 可以獲取到輸入的信息, 點(diǎn)擊保存按鈕以后, 輸出信息(信息顯示形式: 姓名:張三,年齡:33,學(xué)歷:本科,專業(yè):計(jì)算機(jī))

  • DOM節(jié)點(diǎn)操作
    DOM節(jié)點(diǎn)操作指的是: 創(chuàng)建節(jié)點(diǎn)圆恤、復(fù)制節(jié)點(diǎn)、插入節(jié)點(diǎn)、刪除節(jié)點(diǎn)和替換節(jié)點(diǎn)等盆昙。
- createElement(); 創(chuàng)建一個(gè)元素節(jié)點(diǎn)
  var op1 = document.createElement('p')
- appendChild(); 添加一個(gè)新子節(jié)點(diǎn)到子節(jié)點(diǎn)的末尾
  box.appendChild(op1)
- createTextNode(); 創(chuàng)建一個(gè)文本節(jié)點(diǎn)
  var txt = document.createTextNode('哈哈')
- insertBefore(); 將新節(jié)點(diǎn)插入到某節(jié)點(diǎn)前面
  box.insertBefore(div3, div1) // 將div3加入到div1的前面
- replaceChild(); 將新節(jié)點(diǎn)替換舊節(jié)點(diǎn)
  box.replaceChild(op, div1)  // 將div1替換為op
- cloneNode(true); 復(fù)制節(jié)點(diǎn)
  div1.appendChild(div1.cloneNode(true))
- removeChild(); 移除節(jié)點(diǎn)
  box.removeChild(op1)
  • this對象
    this是javascript的一個(gè)關(guān)鍵字羽历。隨著函數(shù)使用場合不同,this的值會(huì)發(fā)生變化淡喜。但是總有一個(gè)原則秕磷,誰調(diào)用即指向誰(this指的是調(diào)用函數(shù)的那個(gè)對象)。
var box = document.getElementById('box');  
box.onclick = function() { 
      console.log(this);  // this表示box對象 
};

// 通過for循環(huán)添加事件, 使用this
var aInput = document.getElementsByTagName('input');
for (var i=0; i<aInput.length; i++) { 
        aInput[i].onclick = function() { 
                console.log(this.value);  //這里的this表示被點(diǎn)擊的那個(gè)input元素節(jié)點(diǎn)對象 
        };
}
  • 練習(xí): 動(dòng)態(tài)表格的創(chuàng)建, 在輸入框中輸入內(nèi)容后,點(diǎn)擊保存則在表格末尾添加一條記錄, 點(diǎn)擊刪除則會(huì)刪除對應(yīng)行的記錄


    練習(xí).png

四炼团、事件

  • 鼠標(biāo)事件
# 鼠標(biāo)事件澎嚣,頁面所有元素都可觸發(fā)鼠標(biāo)事件;

click: 當(dāng)單擊鼠標(biāo)按鈕并在松開時(shí)觸發(fā)
oBox.onclick = function() {
        console.log('單擊了鼠標(biāo)'); 
};

dblclick: 當(dāng)雙擊鼠標(biāo)按鈕時(shí)觸發(fā)。
oBox.ondblclick = function() {
        console.log('雙擊了鼠標(biāo)'); 
};

mousedown:當(dāng)按下了鼠標(biāo)還未松開時(shí)觸發(fā)瘟芝。 
oBox.onmousedown = function() {
        console.log('按下鼠標(biāo)'); 
};

mouseup: 釋放鼠標(biāo)按鈕時(shí)觸發(fā)易桃。 
oBox.onmouseup = function() {
        console.log('松開了鼠標(biāo)'); 
};

mousemove:當(dāng)鼠標(biāo)指針在某個(gè)元素上移動(dòng)時(shí)觸發(fā)。
oBox.onmousemove = function() {
        console.log('鼠標(biāo)移動(dòng)了'); 
};  

mouseenter/mouseover:當(dāng)鼠標(biāo)移入某個(gè)元素的那一刻觸發(fā)锌俱。
oBox.onmouseenter = function() {
        console.log('鼠標(biāo)移入了'); 
}; 

mouseleave/mouseout:當(dāng)鼠標(biāo)剛移出某個(gè)元素的那一刻觸發(fā)晤郑。 
oBox.onmouseleave = function() {
        console.log('鼠標(biāo)移出了'); 
};
  • 鍵盤事件
#  鍵盤事件,在鍵盤上按下鍵時(shí)觸發(fā)的事件(一般由window對象或者document對象調(diào)用)

keydown:當(dāng)用戶按下鍵盤上某個(gè)鍵觸發(fā)贸宏,如果按住不放造寝,會(huì)重復(fù)觸發(fā)。
window.onkeydown = function() {
        console.log(按下了鍵盤上的某個(gè)鍵); 
};

keypress:當(dāng)用戶按下鍵盤上的字符鍵觸發(fā)吭练,如果按住不放匹舞,會(huì)重復(fù)觸發(fā)
window.onkeypress = function() { 
        console.log('按下了鍵盤上的字符鍵'); 
};

keyup:當(dāng)用戶釋放鍵盤上的某個(gè)鍵觸發(fā)。
window.onkeyup = function() {
        console.log('松開鍵盤上的某個(gè)鍵'); 
};

ev.keyCode 鍵碼

  • HTML事件
# HTML事件线脚,跟HTML頁面相關(guān)的事件; 

load:當(dāng)頁面完全加載后觸發(fā)
window.onload = function() { 
        console.log('頁面已經(jīng)加載完畢'); 
};

unload:當(dāng)頁面完全卸載后觸發(fā)
window.onunload = function() { 
        console.log('頁面已經(jīng)卸載完畢'); 
};

select:當(dāng)用戶選擇文本框(input 或 textarea)中的內(nèi)容觸發(fā)。 
input.onselect = function() { 
        console.log('選擇了文本框中的內(nèi)容'); 
};

change:當(dāng)文本框(input 或 textarea)內(nèi)容改變且失去焦點(diǎn)后觸發(fā)叫榕。 
input.onchange = function() { 
        console.log('文本框中內(nèi)容改變了'); 
};

focus:當(dāng)頁面或者元素獲得焦點(diǎn)時(shí)觸發(fā)浑侥。 
input.onfocus = function() { 
        console.log('文本框獲得焦點(diǎn)'); 
};

blur:當(dāng)頁面或元素失去焦點(diǎn)時(shí)觸發(fā)。
input.onblur = function() { 
        console.log('文本框失去焦點(diǎn)'); 
};

submit:當(dāng)用戶點(diǎn)擊提交按鈕在<form>元素節(jié)點(diǎn)上觸發(fā)晰绎。
form.onsubmit = function() { 
        console.log('提交form表單');  
};

reset:當(dāng)用戶點(diǎn)擊重置按鈕在<form>元素節(jié)點(diǎn)上觸發(fā)寓落。 
form.onreset = function() { 
        console.log('重置form表單'); 
};

scroll:當(dāng)用戶滾動(dòng)帶滾動(dòng)條的元素時(shí)觸發(fā)。
window.onscroll= function() { 
        console.log('滾動(dòng)了滾動(dòng)條了'); 
};
  • 案例
    有一塊空白區(qū)域,
    當(dāng)鼠標(biāo)移動(dòng)到區(qū)域內(nèi),顯示"親愛的, 我愛你",
    當(dāng)我鼠標(biāo)移開的時(shí)候,顯示"對不起, 開玩笑",
    當(dāng)我鼠標(biāo)不停的在區(qū)域內(nèi)移動(dòng)的時(shí)候, 變換隨機(jī)顏色(隨機(jī)十六進(jìn)制的顏色:#FFFFFF)
  • 事件對象event
    通過事件的執(zhí)行函數(shù)傳入的event對象(事件對象) 不是在所有瀏覽器都有值, 在IE瀏覽器上event對象并沒有傳過來, 這里我們要用window.event來獲取, 而在火狐瀏覽器上window.event無法獲取, 而谷歌瀏覽器支持event事件傳參和window.event兩種, 為了兼容所有瀏覽器, 我們使用以下方式來得到event事件對象:
box.onclick = function(evt){ 
     var e= evt || window.event; //獲取到event對象(事件對象)
     console.log(e);
};

其中window.event中的window可以省略, 最終我們可以寫成: 
box.onclick = function(evt){ 
     var e= evt || event; //獲取到event對象(事件對象)
     console.log(e);
};

注意: evt || event不要倒過來寫

  • 事件對象屬性
target: 返回觸發(fā)此事件的元素(事件的目標(biāo)節(jié)點(diǎn))
clientX: 瀏覽器可視區(qū)域的x坐標(biāo)
clientY: 瀏覽器可視區(qū)域的y坐標(biāo)
screenX: 顯示器屏幕的x坐標(biāo)
screenY: 顯示器屏幕的y坐標(biāo)
offsetX: 鼠標(biāo)點(diǎn)擊的元素位置距離元素左邊界的x坐標(biāo)
offsetY: 鼠標(biāo)點(diǎn)擊的元素位置距離元素上邊界的y坐標(biāo)
  • 案例(下拉菜單)
    1, 最開始效果如左圖1
    2, 鼠標(biāo)滑過”請選擇游戲名稱”區(qū)域時(shí),效果如圖2
    3, 鼠標(biāo)滑過下拉選項(xiàng)區(qū)域時(shí), 讓下拉選項(xiàng)可以繼續(xù)顯示,移開后隱藏
    4, 鼠標(biāo)在選項(xiàng)中滑過時(shí), 顯示效果圖3
    5, 選擇某一項(xiàng), 將頂部的名稱改成你選擇的游戲名稱


    下拉菜單效果

五荞下、事件冒泡

  • 事件冒泡
    當(dāng)一個(gè)元素接收到事件以后伶选,會(huì)將接收到的事件傳遞給父級元素,一直傳遞給頂層window尖昏;可以利用事件冒泡仰税,可以減少事件的綁定,有利于性能優(yōu)化

注意: 事件傳遞給某個(gè)元素抽诉,并不一會(huì)觸發(fā)該事件陨簇;會(huì)不會(huì)觸發(fā)該事件,和你是否添加該事件有關(guān)迹淌;

事件冒泡
  • 阻止事件冒泡
  非IE: ev.stopPropagation()
  IE: ev.cancelBubble = true;
  // 兼容寫法
  ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble = true;
  • 事件冒泡的使用(擴(kuò)展)
    點(diǎn)擊單元格時(shí)河绽,可以編輯單元格的內(nèi)容己单,點(diǎn)擊表格以外即編輯完成。


    表格的編輯.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耙饰,一起剝皮案震驚了整個(gè)濱河市纹笼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苟跪,老刑警劉巖廷痘,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異削咆,居然都是意外死亡牍疏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門拨齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳞陨,“玉大人,你說我怎么就攤上這事瞻惋∠寐耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵歼狼,是天一觀的道長掏导。 經(jīng)常有香客問我,道長羽峰,這世上最難降的妖魔是什么趟咆? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮梅屉,結(jié)果婚禮上值纱,老公的妹妹穿的比我還像新娘。我一直安慰自己坯汤,他們只是感情好虐唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惰聂,像睡著了一般疆偿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搓幌,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天杆故,我揣著相機(jī)與錄音,去河邊找鬼鼻种。 笑死反番,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罢缸,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼篙贸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枫疆?” 一聲冷哼從身側(cè)響起爵川,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎息楔,沒想到半個(gè)月后寝贡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡值依,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年圃泡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿险。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颇蜡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辆亏,到底是詐尸還是另有隱情风秤,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布扮叨,位于F島的核電站缤弦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏彻磁。R本人自食惡果不足惜碍沐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衷蜓。 院中可真熱鬧抢韭,春花似錦、人聲如沸恍箭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扯夭。三九已至,卻和暖如春鞍匾,著一層夾襖步出監(jiān)牢的瞬間交洗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工橡淑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留构拳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像置森,于是被迫代替她去往敵國和親斗埂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容