DOM
DOM查詢
- 通過(guò)
domcument
對(duì)象獲取元素節(jié)點(diǎn):-
getElementById("id")
:通過(guò)id
屬性獲取一個(gè)元素節(jié)點(diǎn)對(duì)象奖唯; -
getElementsByTagName("tag")
:通過(guò)標(biāo)簽名獲取一組元素節(jié)點(diǎn)對(duì)象构眯; -
getElementsByTagName("*")
:支持通配符,獲取所有節(jié)點(diǎn)對(duì)象嵌洼; -
getElementsByName("name")
:通過(guò)name
屬性獲取一組元素節(jié)點(diǎn)對(duì)象。 - 獲取元素節(jié)點(diǎn)的屬性值:
節(jié)點(diǎn)對(duì)象.屬性名
封恰,但對(duì)于class
屬性麻养,節(jié)點(diǎn)對(duì)象.className
-
- 通過(guò)具體的元素節(jié)點(diǎn)對(duì)象獲取其子節(jié)點(diǎn):
-
childNodes
:獲取其所有的子節(jié)點(diǎn),包括文本節(jié)點(diǎn)诺舔、換行鳖昌、標(biāo)簽間的空白等备畦,但IE8
不會(huì); -
children
:獲取所有的子元素许昨,只獲取標(biāo)簽元素懂盐,且是直接子元素; -
firstChild/lastChild
:獲取第一個(gè)/最后一個(gè)子節(jié)點(diǎn)糕档,也包括文本節(jié)點(diǎn)莉恼、換行,空白等速那; -
firstElementChild
:獲取第一個(gè)標(biāo)簽元素俐银,不兼容<=IE8
;
-
- 獲取父節(jié)點(diǎn)和兄弟節(jié)點(diǎn):
-
parentNode
:獲取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)端仰; -
previousSibling/nextSibling
:獲取前/后一個(gè)兄弟節(jié)點(diǎn)悉患; -
previousElementSibling
:獲取前一個(gè)兄弟標(biāo)簽元素,也不兼容<=IE8榆俺; -
innerText/innerHTML/textContent
:都可以獲取一個(gè)標(biāo)簽的內(nèi)容售躁,innerHTML
的內(nèi)容包含子標(biāo)簽,而innerText
和textContent
只獲取標(biāo)簽內(nèi)的字符串文本茴晋; - 只獲取標(biāo)簽內(nèi)自己的字符串:
firstChild.nodeValue
陪捷,沒(méi)有字符串文本,則返回空字符串诺擅;對(duì)于不能做父元素的標(biāo)簽市袖,如<img/>
, 其firstChild
為null
-
- 每個(gè)節(jié)點(diǎn)(包括文本節(jié)點(diǎn))都具有的
3
個(gè)屬性:nodeName、nodeType苍碟、nodeValse
- 文檔節(jié)點(diǎn):
nodeName =>#document、nodeType =>9撮执、nodeValse =>null
- 元素節(jié)點(diǎn):
標(biāo)簽名、1、null
- 屬性節(jié)點(diǎn):
屬性名退个、2、屬性值
- 文本節(jié)點(diǎn):
#text、3照棋、文本內(nèi)容
- 文檔節(jié)點(diǎn):
-
document.documentElement/body
:獲取<html>/<body>
的元素對(duì)象资溃; -
document.all/document.getElementsByTagName("*")
:獲取所有節(jié)點(diǎn)的標(biāo)簽元素; -
getElementsByClassName('選擇器名稱')
:根據(jù)class
屬性值獲取一組元素烈炭,兼容到>=IE8
-
querySelector('CSS選擇器')
:根據(jù)CSS
選擇器獲取標(biāo)簽元素溶锭,只返回第一個(gè),兼容到>=IE8
符隙; -
querySelectorAll('CSS選擇器')
:返回一組標(biāo)簽元素趴捅; -
HTML
是自頂向下解析的,不能提前獲取document
節(jié)點(diǎn)- 在
<body>
標(biāo)簽之后使用<script>
霹疫,可以獲取節(jié)點(diǎn)對(duì)象拱绑; -
window.onload = function(){ ... }
:等待HTML
文檔加載并渲染完成再執(zhí)行.
- 在
DOM增刪改
-
appendChild()/removeChild()/replaceChild()
:添加/刪除/替換子節(jié)點(diǎn); -
insertBefore(newNode, oldNode)
:在指定的子節(jié)點(diǎn)前插入新的子節(jié)點(diǎn)丽蝎; -
createElement()/createAttribute()/createTextNode()
:創(chuàng)建元素/屬性/文本節(jié)點(diǎn)猎拨;
var li = document.createElement("li"); --> 創(chuàng)建一個(gè)<li>
var text = document.createTextNode("Mark"); --> 創(chuàng)建文本節(jié)點(diǎn)
li.appendChild(text); --> 把文本節(jié)點(diǎn)添加到<li>中
-
innerHTML
也可以完成DOM的增刪改:li.innerHTML="<span>Smith</span>"
var li = document.createElement("li");
li.innerHTML = "Mark"; --> create與innerHTML結(jié)合使用
-
setAttribute()/getAttribute()
:設(shè)置/獲取指定的屬性; -
confirm(str)
:確認(rèn)/取消提示框屠阻,帶有確認(rèn)和取消按鈕红省,返回true/false
;
<button>Button-1</button> <button>Button-2</button>
window.onload=function(){
var btns = document.getElementsByTagName("button")
for (var i=0; i<btns.length; i++) {
btn[i].onclick=function(){
confirm(this.innerHTML); --> this指向當(dāng)前button對(duì)象
confirm(btns[i].innerHTML); -->報(bào)異常undefined国觉,此時(shí)的i=btns.length
}; --> 頁(yè)面加載完成吧恃,首先執(zhí)行的是for循環(huán),而不會(huì)執(zhí)行函數(shù)蛉加;
} --> 在點(diǎn)擊按鈕時(shí)蚜枢,此時(shí)的i=btns.length,所以報(bào)異常针饥;
}; --> 而函數(shù)內(nèi)的this始終指向調(diào)用者,所以可以正常執(zhí)行需频。
DOM操作CSS
JS修改元素樣式
- 選擇器中的樣式是無(wú)法獲取丁眼,也無(wú)法修改的,但可以操作元素的內(nèi)聯(lián)樣式昭殉,其優(yōu)先級(jí)高于選擇器苞七;
-
元素對(duì)象.style.樣式名 = "樣式值"
藐守,通用寫法:元素對(duì)象.style["樣式名"] = "樣式值"
- 對(duì)于
-
連接的屬性,則去掉-
蹂风,并把后面的首字母大寫:btn.style.fontSize="20px"
; - 通用形式則不需要去掉屬性名中的連接符:
btn.style["font-size"]="20px"
; -
<style>
中的選擇器應(yīng)避免使用!important
卢厂,它表示樣式的最高優(yōu)先級(jí),內(nèi)聯(lián)樣式也無(wú)法覆蓋惠啄; -
element.setAttribute('style', 'width:20px;height:30px;')
:設(shè)置元素的style
屬性慎恒; -
element.setAttribute('style')
:移除元素的style
屬性,也即刪除style
樣式撵渡; - 如果要修改多個(gè)樣式融柬,可以在
<style>
中預(yù)定義CSS樣式選擇器,再賦值給元素的className
屬性趋距,這種方式的性能比較高粒氧,也使得JS和CSS更好的分離。
JS獲取元素樣式
-
element.style
:獲取的是當(dāng)前元素上的所有內(nèi)聯(lián)樣式节腐,包括默認(rèn)存在的內(nèi)聯(lián)樣式外盯; -
element.style.樣式名、element.style["樣式名"]
:根據(jù)屬性名獲取內(nèi)聯(lián)樣式的屬性翼雀;- 獲取的只是內(nèi)聯(lián)樣式上的屬性门怪,如果內(nèi)聯(lián)樣式上沒(méi)有手動(dòng)設(shè)置該屬性,則獲取的屬性值為''锅纺;
-
element.style.cssText
:只獲取標(biāo)簽上手動(dòng)設(shè)置的CSS樣式掷空,是一個(gè)字符串;
element.style.cssText = "width:100%;font-size:16px;" -->修改/添加內(nèi)聯(lián)樣式
-
element.getAttribute('style')
:獲取標(biāo)簽上的style屬性值囤锉,同element.style.cssText
-
element.currentStyle.樣式名
:IE獨(dú)有的坦弟,獲取元素當(dāng)前正在使用的所有樣式信息;如果沒(méi)有手動(dòng)設(shè)置樣式的默認(rèn)值官地,則返回auto
酿傍; -
getComputedStyle(element, null)
:window
的方法,獲取元素當(dāng)前正在使用的的所有樣式驱入;
let sty = getComputedStyle(btn, null)
-
sty["background-color"]
返回的是rgb
值赤炒,btn.style["background-color"]
返回的是當(dāng)前樣式中設(shè)置的background-color
屬性值; - 不兼容
<=IE8
-
-
currentStyle
和getComputedStyle()
獲取的屬性都是只讀的亏较,不能修改莺褒; - 獲取CSS樣式屬性的兼容方式:
function getStyle(element, styleName) {
if(window.getComputedStyle) {
return getComputedStyle(element, null)[styleName];
} else { --> IE8的window中沒(méi)有g(shù)etComputedStyle,則返回undefined雪情,即false
return element.currentStyle[styleName];
} --> 屬性styleName要顯示設(shè)置一個(gè)默認(rèn)值遵岩,否則瀏覽器可能返回auto
}
DOM屬性事件
-
clientWidth/clientHeight
:獲取元素的可見寬高,不帶單位px
,返回的是數(shù)值尘执;clientWidth = width + paddingLeft + paddingRight
-
clientWidth和clientHeight
都是只讀屬性舍哄; - 瀏覽器窗口的寬度/高度:
document.documentElement.clientWidth/clientHeight
-
scrollWidth/scrollHeight
:獲取元素的滾動(dòng)區(qū)域?qū)捀撸?- 如果元素區(qū)域帶有滾動(dòng)條,
clientWidth/clientHeight
只能獲取滾動(dòng)窗口內(nèi)可見的寬高誊锭,而scrollWidth/scrollHeight
獲取的寬高表悬,包含滾動(dòng)窗口外的寬高; -
clientWidth/clientHeight
獲取的寬高包含滾動(dòng)條的寬度/高度丧靡; -
scrollLeft/scrollTop
:水平/垂直滾動(dòng)的距離蟆沫; - 當(dāng)垂直滾動(dòng)條滾到底部時(shí),
clientHeight == scrollHeight-scrollTop
-
element.onscroll = function(){};
:綁定滾動(dòng)條滾動(dòng)事件
- 如果元素區(qū)域帶有滾動(dòng)條,
-
offsetWidth/offsetHeight
:獲取元素的整個(gè)寬度和高度窘行,width+padding+border
-
offsetParent
:獲取距離最近的饥追、使用了定位的父元素對(duì)象,如果都沒(méi)有定位罐盔,則返回body
但绕; -
offsetLeft/offsetTop
:當(dāng)前元素相對(duì)于其定位父元素的水平/垂直偏移量,都是只讀的屬性惶看;
上傳圖片
<input type="file" accept="image/*" onchange="uploadImg(this)" />
- accept:指定上傳文件的類型捏顺,打開資源管理器展示的文件類型;
- onchange:<input/>中的內(nèi)容發(fā)生變化時(shí)的事件纬黎;
- 預(yù)覽圖片幅骄,F(xiàn)ileReader是H5提供的,用于讀取文件
uploadImg(ev) {
let file = ev.files[0]
let reader = new FileReader() -->創(chuàng)建FileReader對(duì)象
reader.onloadstart = function (e) { //開始讀取 }
reader.onprogress = function (e) { //正在讀取中 }
reader.onabort = function (e) { //中斷讀取 }
reader.onerror = function (e) { //讀取異常 }
reader.onload = function (e) { --->讀取成功的回調(diào)
let img = document.querySelector("input[type=file]")
img.src = e.target.result
}
reader.readAsDataURL(file) --->開始讀取本地選擇的文件
}
-
element.onmousemove = function(event){}
:鼠標(biāo)在元素中移動(dòng)時(shí)被觸發(fā)本今;- 回調(diào)的參數(shù)
event
中封裝了所有信息拆座,如鼠標(biāo)的水平/垂直坐標(biāo):clientX/clientY
- 但在
IE8
中不會(huì)回調(diào)event
,而是將事件對(duì)象保存在window
的屬性中:window.event
-
clientX/clientY
只針對(duì)當(dāng)前瀏覽器的可見窗口冠息,窗口左上角的坐標(biāo)始終是(0, 0)
挪凑; -
pageX/pageY
:鼠標(biāo)相對(duì)于當(dāng)前頁(yè)面的坐標(biāo),頁(yè)面左上角的坐標(biāo)才是(0, 0)
逛艰,不兼容IE8
躏碳;
- 回調(diào)的參數(shù)
- 頁(yè)面垂直滾動(dòng)時(shí),
scrollTop
的兼容性:獲取頁(yè)面滾動(dòng)的距離散怖;-
document.body.scrollTop
:只適用于Chrome
瀏覽器菇绵,其他瀏覽器返回0
; -
document.documentElement.scrollTop
:適用于Foxfire镇眷、IE
咬最,但Chrome
仍返回0
; - 水平方向滾動(dòng)時(shí)偏灿,
scrollLeft
同理丹诀。
-
-
事件冒泡:如果父節(jié)點(diǎn)和子節(jié)點(diǎn)綁定了相同的事件,那么觸發(fā)子節(jié)點(diǎn)事件時(shí)翁垂,父節(jié)點(diǎn)也會(huì)觸發(fā)铆遭;
- 事件只會(huì)向上傳遞父節(jié)點(diǎn)的相同事件,不會(huì)向下傳遞沿猜;
- 阻止事件冒泡:
event.stopPropagation(); --> 不兼容IE
-
IE
瀏覽器特有的阻止事件冒泡:window.event.cancelBubble = true;
事件委托
事件委托:多個(gè)子元素需要注冊(cè)同一種事件時(shí)枚荣,給其共同的父元素注冊(cè)該事件,事件響應(yīng)時(shí)啼肩,通過(guò)回調(diào)參數(shù) event
獲取每個(gè)子元素橄妆,根據(jù)不同的子元素,執(zhí)行不同的代碼祈坠;
<ul>
<li><a href="javascript:;">超鏈接一</a></li>
<li><a href="javascript:;">超鏈接二</a></li>
</ul>
var uls = document.getElementsByTagName("ul")[0];
uls.onclick = function(event) {
event = event || window.event; --> 兼容IE
var node = event.target; --> 獲取當(dāng)前點(diǎn)擊的子元素節(jié)點(diǎn)對(duì)象
};
-
event.currentTarget 害碾、 event.target
-
click
事件實(shí)際注冊(cè)到<ul>
標(biāo)簽上,event.target
獲取的是實(shí)際點(diǎn)擊標(biāo)簽的元素對(duì)象赦拘;
點(diǎn)擊<li>
慌随,則event.target
就是li
;點(diǎn)擊<a>
躺同,則event.target
就是a
阁猜。 -
event.currentTarget
獲取的是實(shí)際注冊(cè)click
事件的元素對(duì)象,始終是<ul>
對(duì)象蹋艺。
-
-
event.relatedTarget
返回與事件的目標(biāo)節(jié)點(diǎn)相關(guān)的節(jié)點(diǎn)- 對(duì)于
mouseover
事件來(lái)說(shuō)剃袍,該屬性是鼠標(biāo)指針移到目標(biāo)節(jié)點(diǎn)上時(shí)所離開的那個(gè)節(jié)點(diǎn)。 - 對(duì)于
mouseout
事件來(lái)說(shuō)捎谨,該屬性是離開目標(biāo)時(shí)民效,鼠標(biāo)指針進(jìn)入的節(jié)點(diǎn)。 - 對(duì)于其他類型的事件來(lái)說(shuō)涛救,這個(gè)屬性沒(méi)有用畏邢。
- 對(duì)于
函數(shù)節(jié)流:
- JS中有些事件的觸發(fā)頻率特別高,比如:onresize州叠,onmousemove
- 對(duì)于短時(shí)間內(nèi)高頻率觸發(fā)的函數(shù)棵红,可以在函數(shù)內(nèi)使用定時(shí)器減少觸發(fā)次數(shù),實(shí)現(xiàn)函數(shù)節(jié)流咧栗;
- 在觸發(fā)定時(shí)器之前逆甜,先清除一次定時(shí)器,只保留最后一次定時(shí)器任務(wù)致板;
clearTimeout(timer); timer = setTimeout(function{ ... }, 200);
事件
-
addEventListener("事件名", function, false)
:事件綁定交煞,事件名不帶on
; -
element.onclick=function(event){}
; ->屬性的方式綁定事件斟或,多次綁定同一事件時(shí)素征,最后一次綁定會(huì)覆蓋之前的事件; - addEventListener() 可以重復(fù)綁定同一事件,響應(yīng)事件時(shí)御毅,從第一次綁定時(shí)開始響應(yīng)根欧;
uls.addEventListener('click', function(){}, false); --> 綁定click事件
-
removeEventListener('事件名', callback)
:移除綁定的事件,callback
并不是移除事件的回調(diào)端蛆,而是addEventListener()
的回調(diào)函數(shù)名凤粗,因?yàn)樗梢詫?duì)同一事件綁定多次; -
addEventListener()
只兼容到IE9
今豆,而在IE8
中嫌拣,綁定事件使用attachEvent()
-
attachEvent("事件名", function)
:事件名中帶on
,也可以多次綁定同一個(gè)事件呆躲,但事件的響應(yīng)順序與addEventListener()
相反异逐; -
addEventListener()
中的this
指向綁定事件的對(duì)象,而attachEvent()
中指向window
插掂; - 兼容性:
function bind(obj, event, callback) {
if(obj.addEventListener) {
obj.addEventListener(event, callback, false);
} else {
obj.attachEvent("on"+event, function() {
callback.call(obj); // 讓回調(diào)函數(shù)中的this指向綁定的對(duì)象
});
}
}
- 事件的傳播:
- 微軟公司認(rèn)為事件應(yīng)該從內(nèi)向外灰瞻,即事件冒泡的形式;而網(wǎng)景公司認(rèn)為恰恰相反燥筷;
-
W3C
綜合兩種方案箩祥,將事件傳播分為3
個(gè)階段:捕獲階段、目標(biāo)階段肆氓、冒泡階段 - 捕獲階段:事件從最外層的父元素袍祖,向目標(biāo)子元素進(jìn)行事件的捕獲,但默認(rèn)此時(shí)不會(huì)觸發(fā)事件;
- 目標(biāo)階段:事件捕獲到目標(biāo)元素,捕獲結(jié)束李破,開始在目標(biāo)元素上觸發(fā)事件句伶;
- 冒泡階段:事件從目標(biāo)元素向父元素傳遞葵硕,并依次觸發(fā)父元素上的事件;
- 在捕獲階段也觸發(fā)事件:
addEventListener("事件名", function, true)
-
IE<=8
沒(méi)有事件捕獲階段。
- 鼠標(biāo)按下/移動(dòng)/松開:
onmousedown、onmousemove缩举、onmouseup
- 拖拽網(wǎng)頁(yè)中的內(nèi)容時(shí),瀏覽器默認(rèn)會(huì)執(zhí)行搜索內(nèi)容匹颤,導(dǎo)致拖拽功能異常仅孩;
-
return false;
禁止默認(rèn)行為,但不兼容IE8
-
element.setCapture();
捕獲element綁定的相關(guān)事件印蓖,優(yōu)先響應(yīng)辽慕; -
element.releaseCapture();
釋放捕獲; - 但是赦肃,
setCapture()
只有IE
支持溅蛉,Firefox
不會(huì)報(bào)錯(cuò)公浪,Chrome
會(huì)報(bào)錯(cuò);
element.setCapture && element.setCapture(); --> 有setCapture()方法船侧,則執(zhí)行
- 鼠標(biāo)拖拽標(biāo)簽:
element.onmousedown = function(event){ // 給被拖拽的標(biāo)簽注冊(cè)鼠標(biāo)的按下事件
if (event.button != 0) return; // 只有鼠標(biāo)左鍵按下才有效
element.setCapture&&element.setCapture() // 兼容IE
document.onmousemove = function(e){ // 把移動(dòng)事件注冊(cè)到document上欠气,防止卡頓
...... // 更改標(biāo)簽的left/top,達(dá)到移動(dòng)效果
e.preventDefault(); // 阻止瀏覽器的默認(rèn)行為
}
document.onmouseup = function(e){ // 抬起事件也必須注冊(cè)到document上勺爱,任何地方
document.onmousemove = null; // 都可以取消事件
document.onmouseup = null;
document.releaseCapture&&document.releaseCapture(); // 兼容IE
}
// 屏蔽第二次拖拽時(shí)的鬼影晃琳,return false 無(wú)效
event.preventDefault();
event.stopPropagation();
}
- 鼠標(biāo)滾輪:
onmousewheel
讯检,但Firefox
不支持琐鲁,而是使用DOMMouseScroll
,而且火狐必須通過(guò)addEventListener()
綁定滾輪事件人灼;-
event.wheelDelta
:鼠標(biāo)滾輪滾動(dòng)的方向围段,只看正負(fù),不管大小投放,負(fù)值表示向下滾動(dòng)奈泪; -
FireFox
也不支持event.wheelDelta
,而是使用event.detail
灸芳,正數(shù)表示向下滾涝桅; - 如果瀏覽器有滾動(dòng)條,滾動(dòng)鼠標(biāo)滾輪將執(zhí)行瀏覽器的默認(rèn)行為烙样,而不會(huì)執(zhí)行元素的滾輪事件冯遂;
-
element.onmousewheel=function(event){
return false; // 阻止瀏覽器的默認(rèn)行為,執(zhí)行元素的滾輪事件谒获;
};
element.addEventListener("DOMMouseScroll", function(event){
event.preventDefault && event.preventDefault(); // 阻止瀏覽器的默認(rèn)行為
}, false);
-
return false;
在addEventListener()
注冊(cè)的事件中蛤肌,無(wú)法阻止瀏覽器的默認(rèn)行為,必須使用tevent.preventDefault();
- 鼠標(biāo)右擊事件:
oncontextmenu
- 鍵盤事件:
onkeydown(按下)批狱、onkeyup(松開)裸准、onkeypress(按下并松開)
- 鍵盤事件一般綁定給可以獲取焦點(diǎn)的元素對(duì)象,或者
document
赔硫,比如<input />
輸入框炒俱; - 對(duì)于
onkeydown
,如果長(zhǎng)時(shí)間按下一個(gè)按鍵爪膊,那么事件將一直觸發(fā)权悟,而且第一次和第二次觸發(fā)的時(shí)間間隔會(huì)比第二次之后的時(shí)間間隔長(zhǎng)一些,為了避免誤操作惊完; -
event.KeyCode
:獲取按鍵的編碼僵芹,從而判斷按鍵的類型,如y=89
-
altKey小槐、ctrlKey拇派、shiftKey
:判斷Alt荷辕、Ctrl、Shift
鍵是否被按下件豌;
event.keyCode===89 && event.ctrlKey --> Ctrl+y
-
<input />
的onkeydown
事件默認(rèn)行為就是輸入內(nèi)容疮方,return false;
可以阻止輸入。
- 鍵盤事件一般綁定給可以獲取焦點(diǎn)的元素對(duì)象,或者
- 阻止默認(rèn)行為:
return false;
與event.preventDefault();
- 在jQuery中茧彤,
return false;
相當(dāng)于同時(shí)調(diào)用preventDefault()
和stopPropagation()骡显;
-
IE
不支持preventDefault()
,需要使用:window.event.returnValue = false;
- 在原生
JS
中曾掂,addEventListener()/attachEvent()
綁定的事件中惫谤,不支持return false
阻止默認(rèn)行為,必須使用preventDefault()珠洗、window.event.returnValue=false
- H5規(guī)范指出溜歪,在
mouseover
等幾種特殊事件中,return false;
并不一定能終止事件许蓖,所以H5建議盡量不要使用return false
來(lái)阻止事件的默認(rèn)行為蝴猪。
- 在jQuery中茧彤,
BOM
BOM:瀏覽器對(duì)象模型,可以讓我們通過(guò)JS來(lái)操作瀏覽器膊爪;
- BOM對(duì)象:
Window自阱、Navigator、Location米酬、History沛豌、Screen
-
Window
:代表整個(gè)瀏覽器窗口,同時(shí)淮逻,window也是網(wǎng)頁(yè)中的全局對(duì)象琼懊; -
Navigator
:表示當(dāng)前瀏覽器的信息,可以用來(lái)識(shí)別不同的瀏覽器爬早; -
Location
:瀏覽器的地址欄哼丈,可以獲取地址欄信息,操作瀏覽器跳轉(zhuǎn)頁(yè)面筛严; -
History
:表示瀏覽器的歷史紀(jì)錄醉旦,但由于隱私原因,不能獲取到具體的歷史紀(jì)錄桨啃,只能操作
瀏覽器向前/后退车胡,而且只在當(dāng)次訪問(wèn)時(shí)有效,關(guān)閉之后再打開則無(wú)效照瘾; -
Screen
:表示擁護(hù)的屏幕信息匈棘,可以獲取顯示器的相關(guān)信息,常用于移動(dòng)端析命; - 這些
BOM
對(duì)象在瀏覽器中都是作為window
對(duì)象的屬性保存的主卫,又因?yàn)?window
是全局的對(duì)象逃默,可以直接使用這些對(duì)象,而不用通過(guò)window.navigator
調(diào)用簇搅;
-
-
Navigator
- 由于歷史原因完域,
navigator
對(duì)象中的大部分屬性都已經(jīng)不能識(shí)別瀏覽器了; - 一般只會(huì)使用
userAgent
來(lái)判斷瀏覽器的信息:navigator.userAgent
-
IE11
中的userAgent
已經(jīng)去除了微軟和IE
的相關(guān)標(biāo)識(shí)瘩将,不能通過(guò)userAgent來(lái)準(zhǔn)確識(shí)別IE
吟税; -
window.ActiveXObject
:IE
特有的函數(shù),根據(jù)這些特有的信息獲取瀏覽器的類型姿现;
- 由于歷史原因完域,
if(window.ActiveXObject) --> 微軟發(fā)現(xiàn)了這種判斷方式肠仪,所以在IE11返回的是false
但并不意味著IE11中沒(méi)有該對(duì)象:if("ActiveXObject" in window) --> true
-
History
-
length
:瀏覽器歷史列表中的URL
數(shù)量; -
back()/forward()
:加載前/下一個(gè)建钥,回退/前進(jìn)一個(gè)頁(yè)面藤韵; -
go()
:加載某個(gè)具體頁(yè)面,go(1)
相當(dāng)于forward()
熊经,go(-1)
相當(dāng)于back()
;
-
-
Location
-
location
可以獲取地址欄的完成信息欲险,也可以直接操作地址欄镐依,同window.location
- 屬性:
hash、host天试、hostname槐壳、href、pathname喜每、port务唐、protocol、search
-
-
location.
:重定向到一個(gè)新的網(wǎng)站带兜,會(huì)生成歷史紀(jì)錄 -
location = "/login/login.html"
:重定向到新的頁(yè)面枫笛,當(dāng)前域名/login/login.html
-
window.location.search
:獲取地址的參數(shù)部分,?...
-
window.location.hash
:獲取頁(yè)面的錨點(diǎn)刚照,#...
-
-
assign()
:加載新的文檔刑巧,assign("https://www.baidu.com/")
-
reload()
:刷新,默認(rèn)刷新帶有緩存无畔,reload(true)
:強(qiáng)制清空緩存刷新 -
replace()
:用新的文檔替換當(dāng)前文檔啊楚,不會(huì)生成歷史紀(jì)錄,即不能回退浑彰。 -
window.open()
:開啟一個(gè)新的窗口恭理,加載文檔。
定時(shí)器
setTimeout()郭变、setInterval()颜价、clearTimeout()薄风、clearInterval()
- 延遲任務(wù):
-
setTimeout(function, time)
:time
毫秒之后執(zhí)行function
,返回Number
型的數(shù)據(jù)拍嵌; -
clearTimeout(timer)
:即使timer
是undefined
遭赂,也不會(huì)報(bào)錯(cuò),什么也不做横辆;
-
- 定時(shí)任務(wù)
-
setInterval(function, time)
:每隔time
毫秒執(zhí)行一次function
撇他; -
clearInterval(timer)
:清除定時(shí)器;
-
JSON
-
JSON
:JavaScript Object Notation
狈蚤,JS對(duì)象表示法- JSON和JS對(duì)象的格式一樣困肩,只不過(guò)JSON字符串中的屬性名必須加雙引號(hào);
var str = '{"name": "Mack", "age": 18}';
- JSON類型:
對(duì)象{}脆侮,數(shù)組[]
- JSON中允許的屬性值:
字符串锌畸、數(shù)值、布爾值靖避、null潭枣、對(duì)象、數(shù)組
- JSON和JS對(duì)象的格式一樣困肩,只不過(guò)JSON字符串中的屬性名必須加雙引號(hào);
-
JSON
字符串與JS對(duì)象相互轉(zhuǎn)換:JSON
-
JSON.parse(str)
:JSON字符串轉(zhuǎn)JS對(duì)象幻捏; -
JSON.stringify(obj)
:JS對(duì)象轉(zhuǎn)JSON字符串盆犁; -
IE7
不支持JSON,可以使用eval(str)
函數(shù)篡九,將一個(gè)字符串轉(zhuǎn)為有效的表達(dá)式谐岁;
-
var obj = eval("(" + str +")"); -->對(duì)字符串加"()",告訴瀏覽器{}不是一個(gè)代碼塊榛臼;
// obj = {"name": "Mack", "age": 18}
- 但是伊佃,
eval()
的性能比較低,而且存在安全隱患沛善,轉(zhuǎn)換的字符串可能是一段有害的JS代碼航揉。