DOM&BOM

使用事件的基本結(jié)構(gòu):事件源+事件類型=執(zhí)行的指令
事件源
事件
事件處理程序

事件源
事件類型
驅(qū)動(dòng)程序----匿名函數(shù)

事件

onclick:鼠標(biāo)單擊
ondblckick:雙擊鼠標(biāo)
onkeyup:按下并釋放鍵盤上的一個(gè)鍵是出發(fā)
onchange:文本內(nèi)容或下拉菜單中的選項(xiàng)發(fā)生改變
onfocus:獲得焦點(diǎn),表示文本框等獲得鼠標(biāo)光標(biāo)
onblur:失去焦點(diǎn),表示文本框等失去鼠標(biāo)光標(biāo)
onmouseover:鼠標(biāo)移除.即鼠標(biāo)停留在圖片等的上方
onmouseout:鼠標(biāo)移除,即離開圖片等所在的區(qū)域
onload:網(wǎng)頁文檔加載事件
onunload:關(guān)閉網(wǎng)頁時(shí)
onsubmit:表單提交事件

案例
東京廣告欄

京東狗

JS的三個(gè)組成部分
核心(ECMAScript)歐洲計(jì)算機(jī)制造商協(xié)會(huì)
描述了JS的語法和基本對(duì)象茂卦。
文檔對(duì)象模型(DOM)
處理網(wǎng)頁內(nèi)容的方法和接口
瀏覽器對(duì)象模型(BOM)
與瀏覽器交互的方法和接口

1、什么是DOM和節(jié)點(diǎn)
由結(jié)構(gòu)圖中我們可以看到,整個(gè)文檔就是一個(gè)文檔節(jié)點(diǎn)。
而每一個(gè)HMTL標(biāo)簽都是一個(gè)元素節(jié)點(diǎn)。
標(biāo)簽中的文字則是文字節(jié)點(diǎn)妒潭。
標(biāo)簽的屬性是屬性節(jié)點(diǎn)隐锭。
一切都是節(jié)點(diǎn)……
2晒杈、獲取節(jié)點(diǎn)

直接獲取
訪問關(guān)系獲取
操作節(jié)點(diǎn)柑贞,必須首先找到該元素方椎。有三種方法來做這件事:
通過 id 找到 HTML 元素
document.getElementById("demo");
通過標(biāo)簽名找到 HTML 元素
document.getElementsByTagName("div")
通過類名找到 HTML 元素
document.getElementsByClassName("a");
通過類名查找 HTML 元素在 IE 5,6,7,8 中無效

3、節(jié)點(diǎn)操作(3種)
節(jié)點(diǎn)的創(chuàng)建钧嘶、添加棠众、刪除

1.創(chuàng)建節(jié)點(diǎn)
createElement()
var createDiv = document.createElement("div");
2.插入節(jié)點(diǎn)
1.appendChild()
appendChild() 方法向節(jié)點(diǎn)添加最后一個(gè)子節(jié)點(diǎn)
3.插入子節(jié)點(diǎn)
2.insertBefore(插入的節(jié)點(diǎn),參照節(jié)點(diǎn)) 
insertBefore() 方法 有决,如果不是在末尾插入節(jié)點(diǎn)闸拿,而是想放在特定的位置上,用這個(gè)方法.
該方法接受2個(gè)參數(shù)书幕,第一個(gè)是要插入的節(jié)點(diǎn)新荤,第二個(gè)是參照節(jié)點(diǎn)。如果 第二個(gè)參數(shù) 為null(不是不寫)按咒,則默認(rèn)插入到后面
可以給某個(gè)id 的前面

刪除節(jié)點(diǎn)

removeChild()
父節(jié)點(diǎn).removeChild(子節(jié)點(diǎn))迟隅;

不知道父級(jí)的情況下,可以這么寫:node.parentNode.removeChild(node)

復(fù)制節(jié)點(diǎn)
cloneNode() 
var  newNode = oldNode.cloneNode() ;

用于復(fù)制節(jié)點(diǎn)励七, 接受一個(gè)布爾值參數(shù)智袭, true 表示深復(fù)制(復(fù)制節(jié)點(diǎn)及其所有子節(jié)點(diǎn)), false 表示淺復(fù)制(復(fù)制節(jié)點(diǎn)本身掠抬,不復(fù)制子節(jié)點(diǎn))

社直接點(diǎn)屬性
獲群鹨啊:getAttribute(名稱)
設(shè)置:setAttribute(名稱, 值)
刪除:removeAttribute(名稱)

4、屬性操作(2種)

getAttribute()/setAttribute()/removeAttribute()

節(jié)點(diǎn)中的父子兄弟訪問關(guān)系

父節(jié)點(diǎn)
parentNode
兄弟節(jié)點(diǎn)
nextSibling
nextElementSibling
previousSibling
previousElementSibling
子節(jié)點(diǎn)
firstChild 
firstElementChild
lastChild
lastElementChild 
所有子節(jié)點(diǎn)
childNodes
children

childNodes和children區(qū)別

childNodes:它是標(biāo)準(zhǔn)屬性两波,它返回指定元素的子元素集合瞳步,包括HTML節(jié)點(diǎn),所有屬性腰奋,文本節(jié)點(diǎn)
火狐 谷歌等高本版會(huì)把換行也看做是子節(jié)點(diǎn)
nodeType==1時(shí)才是元素節(jié)點(diǎn)
      nodeType  ==  1  表示 的是 元素節(jié)點(diǎn)      記住   元素就是標(biāo)簽
      nodeType  ==  2  表示是屬性節(jié)點(diǎn)   了解
      nodeType  ==  3  是文本節(jié)點(diǎn)   了解

children:非標(biāo)準(zhǔn)屬性单起,它返回指定元素的子元素集合。
但它只返回HTML節(jié)點(diǎn)劣坊,甚至不返回文本節(jié)點(diǎn)嘀倒,雖然不是標(biāo)準(zhǔn)的DOM屬性,但它和innerHTML方法一樣局冰,得到了幾乎所有瀏覽器的支持测蘑。
children在IE6/7/8中包含注釋節(jié)點(diǎn) 

獲得所有的兄弟節(jié)點(diǎn)

function siblings(elm) {
        var a = [];
        var p = elm.parentNode.children;
        for(var i =0,pl= p.length;i<pl;i++) {
            if(p[i] !== elm) a.push(p[i]);
        }
        return a;
}

DOMCore—可以用在任何DOM文檔中

getElementById()  //根據(jù)id屬性獲取一個(gè)DOM對(duì)象,區(qū)分大小寫康二,符合代碼規(guī)范
getElementsByTagName()  //根據(jù)標(biāo)簽返回多個(gè)DOM對(duì)象
HTML-DOM—僅僅能夠用在HTML文檔中
getElementsByName()
HTML5中新增
getElementsByClassName()

DOM對(duì)象的屬性和HTML的標(biāo)簽屬性幾乎是一致的

src碳胳、title、className沫勿、href

練習(xí):
切換圖片
點(diǎn)擊按鈕隱藏顯示div
關(guān)閉二維碼
美女相冊(cè)
DOM初體驗(yàn)案例
1.切換圖片(a連接+圖片)
2.顯示和隱藏盒子
3.美女相冊(cè)

innerHTML—會(huì)把內(nèi)容解析到DOM樹上
獲取標(biāo)簽之間的內(nèi)容
設(shè)置標(biāo)簽之間的內(nèi)容
innerText (FF中textContent)—會(huì)對(duì)內(nèi)容轉(zhuǎn)義
獲取標(biāo)簽之間的內(nèi)容
設(shè)置標(biāo)簽之間的內(nèi)容

表單元素的屬性

type挨约、value味混、checked、selected诫惭、disabled

練習(xí):
點(diǎn)擊按鈕禁用文本框
搜索文本框
檢測(cè)用戶名是否是3-6位惜傲,密碼是否是6-8位,如果不滿足要求高亮顯示文本框
設(shè)置下拉框中的選中項(xiàng)(水果)
給文本框賦值贝攒,獲取文本框的值
全選反選

getAttribute()
setAttribute()
removeAttribute()

直接使用.屬性的方式不可以設(shè)置自定義屬性(IE除外),getAttribute()什么時(shí)候都可以用时甚,推薦使用
練習(xí):
Tab切換

nodeType 節(jié)點(diǎn)的類型

1  元素節(jié)點(diǎn)
2 屬性節(jié)點(diǎn)
3 文本節(jié)點(diǎn) 
nodeName        節(jié)點(diǎn)的名稱(標(biāo)簽名稱)
nodeValue       節(jié)點(diǎn)值
元素節(jié)點(diǎn)的nodeValue始終是null

設(shè)置樣式的兩種方式

className
style

獲取樣式

DOM的style屬性只能獲取標(biāo)簽中使用style設(shè)置的樣式隘弊,無法獲取

嵌入或外部樣式

style.cssText 獲取style里面的字符串

設(shè)置樣式

無論設(shè)置還是獲取只能操作行內(nèi)式

1.樣式少的時(shí)候使用
2.style是對(duì)象(其他大部分是字符串)
3.值是字符串,沒有設(shè)置值是“”荒适;
4.命名規(guī)則梨熙,駝峰命名。和css不一樣
5.設(shè)置了類樣式不能獲取刀诬。(只和行內(nèi)式交互咽扇,和內(nèi)嵌和外鏈無關(guān))
6.box.style.cssText = “字符串形式的樣式”;

backgroundColor
backgroundImage
color
width
height
border
opacity (IE8以前filter: alpha(opacity=xx))
注意DOM對(duì)象style的屬性和標(biāo)簽中style內(nèi)的值不一樣陕壹,因?yàn)樵贘S中-不能作為標(biāo)識(shí)符
backgroundColor       DOM中
background-color    CSS中

當(dāng)前輸入的文本框高亮顯示
改變div的大小
表格隔行變色质欲、高亮顯示(做過)
百度皮膚
顯示隱藏/關(guān)閉廣告/顯示二維碼(隱藏方法)
提高層級(jí)

隱藏顯示
display
元素隱藏后,不占位置糠馆,頁面上的元素會(huì)重新排列
visibility
元素隱藏后嘶伟,占位置
hidden
visible
opacity、position

位置

position
left
top
right
bottom
z-index

練習(xí):祝愿墻

動(dòng)態(tài)創(chuàng)建元素的三種方式

方式一:
document.write()
方式二:
innerHTML
方式三:
createElement()
appendChild()
removeChild()
insertBefore()
replaceChild()

案例
動(dòng)態(tài)創(chuàng)建列表又碌,高亮顯示(四大美女)
選擇水果
模擬百度搜索文本框
動(dòng)態(tài)創(chuàng)建在線人員列表
動(dòng)態(tài)創(chuàng)建祝愿墻

動(dòng)態(tài)創(chuàng)建表格

方式1
createElement()
方式2
rows                          (只讀九昧,table和textarea能用)
insertRow()              (只有table能調(diào)用)
deleteRow()           (只有table能調(diào)用)
cells                 (只讀,table和textarea能用)
insertCell()               (只有tr能調(diào)用)
deleteCell()              (只有tr能調(diào)用)

使用onclick注冊(cè)多個(gè)事件處理程序

   //注冊(cè)多個(gè)事件處理程序
    function addEvent(element,event,fn) {
            var oldfn = element[event];
            if (typeof oldfn != "function") {
                element[event] = fn;
            }else{
                element[event] = function() {
                    oldfn();
                    fn();
                }
            }
        }

注冊(cè)事件的兩種方式

onclick
DOM0
幾乎所有的瀏覽器都支持
addEventListener
DOM2
現(xiàn)代瀏覽器支持毕匀,IE9+
可以給同一個(gè)事件注冊(cè)多個(gè)事件處理程序
可以選擇捕獲或者冒泡
IE9以前使用attachEvent

移除事件的兩種方式

element.onclick = null;
removeEventListener
IE9以前detachEvent
如果注冊(cè)的時(shí)候使用的是匿名函數(shù)铸鹰,則無法移除

給多個(gè)DOM對(duì)象注冊(cè)事件的話是使用命名函數(shù)還是匿名函數(shù)?
比如 給多個(gè)文本框注冊(cè)事件皂岔,獲取文本框的值

innerHTML在清空內(nèi)容的時(shí)候和事件相關(guān)的地方

addEventLisener和attachEvent

區(qū)別:
事件名稱的區(qū)別
addEventLisener中第一個(gè)參數(shù)type是click蹋笼、load,不帶on
attachEvent中一個(gè)參數(shù)type是onclick凤薛、onload
this的區(qū)別
addEventLisener:事件處理程序會(huì)在當(dāng)前對(duì)象的作用域運(yùn)行姓建,因此,時(shí)間處理程序的this就是當(dāng)前對(duì)象
attachEvent:事件處理程序是在全局作用域下運(yùn)行因此this就是window

冒泡事件
btn.addEventListener("click",handle,false);
事件捕獲
btn.addEventListener("click",handle,true);
事件對(duì)象的獲取方式

標(biāo)準(zhǔn)DOM的事件對(duì)象
在事件處理程序中傳入事件對(duì)象
IE中的事件對(duì)象
window.event
跨瀏覽器的解決方案
event = event ? event : window.event;

事件對(duì)象
獲取當(dāng)前對(duì)象(只讀)
target 觸發(fā)事件的元素
currentTarget 始終是當(dāng)前執(zhí)行事件處理程序的對(duì)象
IE中對(duì)應(yīng)的屬性 srcElement == target
事件類型(只讀)
type click缤苫、mouseover速兔。。活玲。
事件處于哪個(gè)階段(只讀)
eventPhase

取消默認(rèn)行為
preventDefault()
IE中對(duì)應(yīng)的 returnValue = false
取消冒泡和捕獲
stopPropagation() 取消冒泡和捕獲
IE中對(duì)應(yīng)的 cancelBubble=true 取消冒泡(IE中不支持捕獲)
事件委托
利用事件冒泡涣狗,把多個(gè)DOM對(duì)象的事件谍婉,注冊(cè)到父容器上

鼠標(biāo)事件
mousedown、mouseup镀钓、mousemove穗熬、mouseover、mouseout丁溅、click唤蔗、dblclick
事件對(duì)象的屬性
clientX/clientY 所有瀏覽器都支持,窗口位置
pageX/pageY IE8以前不支持窟赏,頁面位置
screenX/screenY 屏幕位置
shiftKey/ctrlKey/altKey 同時(shí)按下組合鍵
button

案例
跟著鼠標(biāo)飛的天使
鼠標(biāo)點(diǎn)哪圖片飛到哪里
拖拽效果
彈出登錄窗口
模擬滾動(dòng)條
獲取鼠標(biāo)在div內(nèi)的坐標(biāo)
放大鏡效果
祝愿墻拖動(dòng)

鍵盤事件
keydown妓柜、keypress、keyup
事件對(duì)象的屬性
keyCode 鍵盤碼涯穷,只有數(shù)字和字母對(duì)應(yīng)ASCII碼
charCode 對(duì)應(yīng)ASCII碼棍掐,只有keypress才有效,IE9+
案例
按回車切換到下一個(gè)文本框
按esc隱藏登錄框
檢測(cè)密碼強(qiáng)度
<h2>BOM</h2>

瀏覽器對(duì)象模型
window對(duì)象
window對(duì)象是JavaScript中的頂級(jí)對(duì)象
所有定義在全局作用域中的變量拷况、函數(shù)都會(huì)變成window對(duì)象的屬性和方法
window對(duì)象下的屬性和方法調(diào)用的時(shí)候可以省略window

系統(tǒng)的對(duì)話框

alert() //不同瀏覽器中的外觀是不一樣的
confirm()//兼容不好
prompt()    //不推薦使用

打開窗口

window.open(url,target,param)
url 要打開的地址
target新窗口的位置 _blank  _self  _parent(父框架)
param 新窗口的一些設(shè)置
返回值作煌,新窗口的句柄
window.close()  關(guān)閉窗口
新窗口.moveTo(5,5)    新窗口.moveBy()
新窗口.resizeTo()   window.resizeBy()

定時(shí)器

循環(huán)執(zhí)行(等待時(shí)間過去之后執(zhí)行)
var timerId = setInterval(code,interval);
clearInterval(timerId);
間隔時(shí)間執(zhí)行,不是特別精確

定時(shí)執(zhí)行(立刻執(zhí)行)
var timerId = setTimeout(code,interval);
clearTimeout(timerId);

location對(duì)象

window.location
location相當(dāng)于瀏覽器地址欄
可以將url解析成獨(dú)立的片段
location對(duì)象的屬性
href
hash   返回url中#后面的內(nèi)容赚瘦,包含#
host    主機(jī)名粟誓,包括端口
hostname   主機(jī)名
pathname     url中的路徑部分
protocol    協(xié)議 一般是http、https
search       查詢字符串


location.assign()    改變?yōu)g覽器地址欄的地址起意,并記錄到歷史中
設(shè)置location.href  就會(huì)調(diào)用assign()努酸。一般使用location.href 進(jìn)行頁面之間的跳轉(zhuǎn)
location.replace()  替換瀏覽器地址欄的地址,不會(huì)記錄到歷史中
location.reload()    重新加載

window.navigator 的一些屬性可以獲取客戶端的一些信息
userAgent    (系統(tǒng)杜恰,瀏覽器)
platform       (瀏覽器支持的系統(tǒng)获诈,win/mac/linux)

歷史記錄管理
后退
history.back()
history.go(-1)    0是刷新
前進(jìn)
history.forward()
history.go(1)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市心褐,隨后出現(xiàn)的幾起案子舔涎,更是在濱河造成了極大的恐慌,老刑警劉巖逗爹,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡嫌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡掘而,警方通過查閱死者的電腦和手機(jī)挟冠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袍睡,“玉大人知染,你說我怎么就攤上這事“呤ぃ” “怎么了控淡?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嫌吠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我掺炭,道長(zhǎng)辫诅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任涧狮,我火速辦了婚禮炕矮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘者冤。我一直安慰自己吧享,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布譬嚣。 她就那樣靜靜地躺著,像睡著了一般钞它。 火紅的嫁衣襯著肌膚如雪拜银。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天遭垛,我揣著相機(jī)與錄音尼桶,去河邊找鬼。 笑死锯仪,一個(gè)胖子當(dāng)著我的面吹牛泵督,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庶喜,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼小腊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了久窟?” 一聲冷哼從身側(cè)響起秩冈,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斥扛,沒想到半個(gè)月后入问,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稀颁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年芬失,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾灶。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棱烂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阶女,到底是詐尸還是另有隱情垢啼,我是刑警寧澤窜锯,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站芭析,受9級(jí)特大地震影響锚扎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馁启,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一驾孔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惯疙,春花似錦翠勉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒿偎,卻和暖如春朽们,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诉位。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工骑脱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苍糠。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓叁丧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親岳瞭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拥娄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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