DOM2

選擇符API

querySelector()

  • 方法接收一個(gè)css選擇符欢峰,如果傳入不被支持的選擇符葬荷,會(huì)拋錯(cuò),沒(méi)有找到匹配的元素纽帖,返回null
var body = document.querySelector("body");
var myDiv = document.querySelector("#myDiv");

// 類為selected的第一個(gè)元素
var selected = document.querySelector(".selected");

// 類為button的第一個(gè)img元素
var img = document.querySelector("img.button");  

querySelectorAll()

  • 與selector()方法相同宠漩,但是這個(gè)方法返回的是NodeList的實(shí)例
var strongs = document.querySelectorAll("p strong");
var i ,len,strong;
for (var i = 0; len = strongs.lenght ; i < len; i ++){
    strong = strongs[i];
    strong.className = 'important';
}

matchesSelector()

  • 有兼容問(wèn)題
function matchesSelector(ele,selector){
    if(ele.matchesSelector){
        return ele.matchesSelector(selector);
    }else if (ele.msMatchesSelector){
        return ele.msMathcesSelector(selector);
    }else if (ele.mozMatchesSelector){
        return ele.mozMatchesSelector(selector);
    }else if (ele.webkitMatchesSelector){
        return ele.webkitMatchesSelector(selector);
    }else{
        throw new Error('not supported')
    }
}

if (matchesSelector(document.body,'.box')){
    //
}

元素遍歷

  • childElementCount : 返回子元素(不包括文本節(jié)點(diǎn)和注釋)的個(gè)數(shù)
  • firstElementChild,firstChild : 指向第一個(gè)子元素
  • lastElementChild,lastChild : 指向最后一個(gè)元素
  • previousElementSibling,previousSibling : 指向同級(jí)的前一個(gè)元素
  • nextElementSibling,nextSibling : 指向同級(jí)的后一個(gè)元素

HTML5

與類相關(guān)的擴(kuò)充

getElementsByClassName()
// 獲取類名為red,box的元素懊直,順序無(wú)所謂
var aRedBox = document.getElementsByClassName("red box");

var aRed = document.getElementsByClassName("red");

classList屬性
var classNames = div.className.split(/\s+/);
var pos = -1,
    i,
    len;
for ( i = 0; len = classNames.lenght; i < len; i ++){
    if (classNames[i] == "user"){
        pos = i;
        break;
    }
}
classNames.splice(i,1);
div.className = classNames.join(' ');
  • 新增屬性
div.classList.remove('red');   // 刪除red的類
div.classList.add('red');     //新增類
div.classList.toggle('red')    // 類的切換
div.classList.contains('red');     // 存在返回true扒吁,不存在返回false

焦點(diǎn)管理

  • document.activeElement DOM中當(dāng)前獲得焦點(diǎn)的元素
    • 文檔加載期間,document.activeElement的值為null室囊,加載完成雕崩,保存的是document.body
var button = document.getElementById('button');
button.focus();     // 獲得焦點(diǎn)
console.log(document.activeElement == button);   // true
  • document.hasFocus() 確定文檔是否獲得了焦點(diǎn)
var button = document.getElementById('myButton');
button.focus();
console.log(document.hasFocus());   // true

HTMLDocument 變化

readyState 屬性
  • 兩種狀態(tài) loading 和 complete
  • 通過(guò)它實(shí)現(xiàn)一個(gè)指示文檔已經(jīng)加載完成的指示器,必須要借助一個(gè)onload事件處理程序設(shè)置一個(gè)標(biāo)簽
window.onload = function(){
     if (document.readyState == 'complete'){
            alert('afklsdf')
        }
    }
head屬性
var head = document.head || document.getElementsByTagName('head')[0];

自定義數(shù)據(jù)屬性

<div data-appId='123'>ksdk</div>

//js中的讀取波俄,設(shè)置
var oDiv = document.getElementsByTagName('div')[0];

//得到值
var AppID = oDiv.dataset.appId;

//設(shè)置值
oDiv.dataset.appId = '456';

if ( oDiv.dataset.myName){
    ....
}


//可以創(chuàng)建一個(gè)賦值
document.onclick = function(){
    oBox.dataset.name = 'dan';
}

插入標(biāo)記

innerHTML 屬性
  • 在讀模式下晨逝,返回與調(diào)用的所有子節(jié)點(diǎn)(包括元素,注釋懦铺,和文本節(jié)點(diǎn))對(duì)應(yīng)的html標(biāo)簽,但是不同的瀏覽器文本格式會(huì)不同
  • 在寫(xiě)模式下支鸡,innerHTML會(huì)根據(jù)指定的值創(chuàng)建新的DOM樹(shù)
outerHTML 屬性
<div id='box'>
    11111
</div>

var oBox = document.getElementById('box');
oBox.outerHTML = '<p>6666</p>'

//上面的代碼與下面一樣
var p = document.createElement('p');
p.appendChild(document.createTextNode('666'));
div.parentNode.replaceChild(p,div);
insertAdjacentHTML() 方法
oP.insertAdjacentHTML("beforebegin","<p>hello world</p>")  // 作為前一個(gè)同輩元素插入

oP.insertAdjacentHTML("afterbegin","<p>作為第一個(gè)子元素插入</p>")  // 作為第一個(gè)子元素插入

oP.insertAdjacentHTML("beforeend","<p>作為最后一個(gè)元素插入</p>")   // 作為最后一個(gè)子元素插入

oP.insertAdjacentHTML("afterend","<p>作為后一個(gè)同輩元素插入</p>")  // 作為后一個(gè)同輩元素插入
內(nèi)存與性能問(wèn)題
  • 使用innerHTML和outerHTML效率更高

  • 多次的頻繁操作innerHTML效率很低冬念,可以單獨(dú)構(gòu)建字符串,然后通過(guò)字符串的計(jì)算牧挣,最后統(tǒng)一給innerHTML急前。

contains方法

console.log(a.contains(b));  // true  , false
  • 判斷b元素是不是a元素的后代,支持的瀏覽器:IE瀑构,ff裆针,safari,opera寺晌,chrome

compareDocumentPosition()

  • 通過(guò)掩碼表示兩個(gè)節(jié)點(diǎn)間的關(guān)系
掩碼 節(jié)點(diǎn)關(guān)系
1 無(wú)關(guān)
2 居前(指定節(jié)點(diǎn)在參考節(jié)點(diǎn)之前)
4 居后(指定節(jié)點(diǎn)在參考節(jié)點(diǎn)之后)
8 包含(給定節(jié)點(diǎn)是參考節(jié)點(diǎn)的祖先)
16 被包含(給定節(jié)點(diǎn)是參考節(jié)點(diǎn)的后代)
  • 多種瀏覽器兼容
function contains(refNode, otherNode){  
    if (typeof refNode.contains == "function" &&  
    (!client.engine.webkit || client.engine.webkit >= 522)){  // 檢測(cè)當(dāng)前瀏覽器所用的webkit的版本號(hào)
    return refNode.contains(otherNode);  
    } else if (typeof refNode.compareDocumentPosition == "function"){  
    return !!(refNode.compareDocumentPosition(otherNode) & 16);  
    } else {  
    var node = otherNode.parentNode;  
    do {  
    if (node === refNode){  
    return true;  
    } else {  
    node = node.parentNode;  
    }  
    } while (node !== null);  
    return false;  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末世吨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呻征,更是在濱河造成了極大的恐慌耘婚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陆赋,死亡現(xiàn)場(chǎng)離奇詭異沐祷,居然都是意外死亡嚷闭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)赖临,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胞锰,“玉大人,你說(shuō)我怎么就攤上這事兢榨⌒衢牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵色乾,是天一觀的道長(zhǎng)誊册。 經(jīng)常有香客問(wèn)我,道長(zhǎng)暖璧,這世上最難降的妖魔是什么案怯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮澎办,結(jié)果婚禮上嘲碱,老公的妹妹穿的比我還像新娘。我一直安慰自己局蚀,他們只是感情好麦锯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著琅绅,像睡著了一般扶欣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上千扶,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天料祠,我揣著相機(jī)與錄音,去河邊找鬼澎羞。 笑死髓绽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妆绞。 我是一名探鬼主播顺呕,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼括饶!你這毒婦竟也來(lái)了株茶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巷帝,失蹤者是張志新(化名)和其女友劉穎忌卤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體楞泼,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驰徊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年笤闯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棍厂。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颗味,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牺弹,到底是詐尸還是另有隱情浦马,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布张漂,位于F島的核電站晶默,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏航攒。R本人自食惡果不足惜磺陡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漠畜。 院中可真熱鬧币他,春花似錦、人聲如沸憔狞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘾敢。三九已至拍冠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簇抵,已是汗流浹背倦微。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留正压,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓责球,卻偏偏與公主長(zhǎng)得像焦履,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雏逾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 一嘉裤、概述 document節(jié)點(diǎn)是整個(gè)文檔樹(shù)的頂層節(jié)點(diǎn),每張網(wǎng)頁(yè)都有自己的document節(jié)點(diǎn)栖博。window.doc...
    周花花啊閱讀 1,334評(píng)論 0 1
  • 個(gè)人博客:https://yeaseonzhang.github.io 花了半個(gè)多月的時(shí)間屑宠,終于又把“JS紅寶書(shū)”...
    Yeaseon閱讀 11,537評(píng)論 9 52
  • 1你看到了什么?我看到了一位母親正在很嚴(yán)厲的批評(píng)孩子仇让,并且手捏著孩子的兩個(gè)胳膊典奉。 2. 焦點(diǎn)是哪部分躺翻?焦點(diǎn)在母親的...
    陳恒麗閱讀 543評(píng)論 0 0
  • 分手第33天的時(shí)候我想看看《失戀33天》里有沒(méi)有什么可以治愈的方法公你,不巧那天我偏偏忘了,為什么呢假瞬?明明叮囑了自己好...
    甲支閱讀 3,320評(píng)論 11 9
  • 周五又放肆了一下陕靠,剛剛看完更新的奇葩說(shuō)。 每次看脱茉,都會(huì)有不同的感覺(jué)剪芥。所以就耽誤了今天記錄的時(shí)間了。所以今天就分享幾...
    Michiko七七閱讀 246評(píng)論 0 0