JavaScript基礎(chǔ)知識(shí)總結(jié)——DOM擴(kuò)展

盡管DOM作為API已經(jīng)十分完善了汰蓉,但是為了更多的功能甲棍,仍然會(huì)有一些專有的擴(kuò)展喜喂。

選擇符API

為了讓讓瀏覽器原生支持 CSS 查詢,選擇符API提供了兩個(gè)主要的方法:querySelector()和querySelectorAll()婴氮,可以通過Document和Element類去調(diào)用。支持的瀏覽器有:IE8+,FireFox3.5,Safari3.1+,Chrome和Opera10+

  • querySelector()
    1.該方法接收一個(gè) CSS 選擇符盾致,返回與該模式匹配的第一個(gè)元素主经,如果沒有找到匹配的元素,返回null庭惜。
var myDiv = document.querySelector('#myDiv'); //選擇了id為myDiv的第一個(gè)元素
var img  = document.body.querySelector('.button'); //在body中class為button的第一個(gè)元素
  • querySelectorAll()
    這個(gè)方法返回的是一個(gè)NodeList的實(shí)例罩驻,實(shí)際上是帶有所有屬性和方法的NodeList。
var myDiv = document.querySelector('#myDiv'); //選擇了id為myDiv的元素
var img  = document.body.querySelector('.button'); //在body中class為button的元素的nodeList
  • matchesSelector()
    Selectors API Level 2 規(guī)范為Element類型新增了一個(gè)方法matchesSelector()护赊。這個(gè)方法接收一個(gè) CSS 選擇符惠遏,如果調(diào)用元素與該選擇符匹配,返回true骏啰;否則节吮,返回false。
if (document.body.matchesSelector("body.page1")) {
  //true
}

元素遍歷

對(duì)于元素間的空格判耕,IE9 及之前的版本不會(huì)返回文本節(jié)點(diǎn)透绩,而其他瀏覽器都會(huì)返回文本節(jié)點(diǎn),因此導(dǎo)致了在使用 childNodes 和 fristChild 等屬性時(shí)的行為不一致壁熄。為了彌補(bǔ)差異帚豪,Emelent Traversal 規(guī)范定義了一組新屬性:
1.childElementCount: 返回子元素(不包括文本節(jié)點(diǎn)和注釋)的個(gè)數(shù)。
2.firstElementChild: 指向第一個(gè)子元素草丧;firstChild 的元素版狸臣。
3.lastElementChild: 指向最后一個(gè)子元素;lastChild 的元素版昌执。
4.previousElementSibling: 指向前一個(gè)同輩元素烛亦;previousSibling 的元素版。
5.nextElementSibling: 指向后一個(gè)同輩元素仙蚜;nextSibling 的元素版此洲。

//現(xiàn)在可以這樣遍歷元素的子元素
var i;
var len;
var child = element.firstElementChild;
while(child != element.lastElementChild) {
  processChild(child);  //已知其是元素
  child = child.nextElementSibling;
}

HTML5相關(guān)的擴(kuò)展

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

1.getElementsByClassName():該方法接收一個(gè)參數(shù),即一個(gè)包含一或多個(gè)類名的字符串委粉,返回帶有指定類型的所有元素的NodeList呜师。支持的瀏覽器是:IE9+,Firefox3+,Safari3.1+,Chrome和Opera9.5+贾节;

var allCurrentUsernames = document.getElementsByClassName("username current");  
//返回class同時(shí)為a和b的元素

2.classList:獲取元素的class汁汗,返回一個(gè)DOMTokenList的實(shí)例衷畦,length屬性代表長(zhǎng)度,item()和方括號(hào)引用知牌;而且還添加了如下方法:add(),contain(),remove(),toggle()
支持的瀏覽器只有:Firefox3.6+和Chorme

//刪除類
div.classList.remove('user');
//添加類
div.classList.add('current');
//切換類
div.classList.toggle('user');
//確定元素中是否包含類
if(div.classList.contains('bd') && !div.classList.contains('disabled')) {
}
迭代類名
for (var i =0,len=div.classList.length;i < len; i++) {
   doSomething(div.classList[i]);
}
  • 焦點(diǎn)管理
    HTML5 也添加了輔助管理 DOM 焦點(diǎn)的功能祈争。首先就是document.activeElement屬性,這個(gè)屬性始終會(huì)引用 DOM 中當(dāng)前獲得了焦點(diǎn)的元素角寸。支持的瀏覽器是:IE4+,Firefox3+菩混,Safari4+,Chrome和Opera8+;
    1.默認(rèn)情況下扁藕,文檔剛加載完成時(shí)沮峡,document.activeElement中保存的是document.body元素的引用。
    2.文檔加載期間亿柑,document.activeElement的值為null邢疙。
    3.另外新增了document.hasFocus()方法,這個(gè)方法用于確定文檔是否獲得了焦點(diǎn)望薄。
  • HTMLDocument的變化
    HTML5頁(yè)擴(kuò)展了HTMLDocument疟游,增加了新的功能。
    1.readyState 屬性痕支,表示文檔的加載狀態(tài)颁虐。支持的瀏覽器是:IE4+,Firefox3.6+,Safari,Chrome和Opera9+采转;
    2.document.compatMode聪廉,在標(biāo)準(zhǔn)模式下,值等于CSS1Compat故慈,而在混雜模式下板熊,值等于BackCompat。
if (document.readyState == 'complete') {
//文檔加載完畢察绷,執(zhí)行操作
}
//兼容操作
var head = document.head || document.getElementsByTagName('head')[0];

3.document.head屬性干签,引用文檔的<head>元素。支持的瀏覽器:Safari5,Chrome

  • 字符集屬性
    HTML5也新增了幾個(gè)與文本相關(guān)的字符集拆撼。
    1.charset屬性表示文檔中實(shí)際使用的字符集容劳,也可以用來指定新字符集。默認(rèn)值為UTF-16闸度。
    2.defaultCharset竭贩,表示根據(jù)默認(rèn)瀏覽器及操作系統(tǒng)的設(shè)置,當(dāng)前文檔默認(rèn)的字符集應(yīng)該是什么莺禁。

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

  • 插入標(biāo)記
    1.innerHTML 屬性返回與調(diào)用元素的所有子節(jié)點(diǎn)對(duì)應(yīng)的 HTML 標(biāo)記留量。在寫模式下,innerHTML會(huì)根據(jù)指定的值創(chuàng)建新的 DOM 樹,然后用這個(gè) DOM 樹完全替換調(diào)用元素原先的所有子節(jié)點(diǎn)楼熄。
    2.outerHTML 屬性在讀模式下忆绰,該屬性返回所有調(diào)用它的元素及所有子節(jié)點(diǎn)的 HTML 標(biāo)簽。再寫模式下可岂,會(huì)根據(jù)指定的 HTML 字符串創(chuàng)建新的 DOM 子樹错敢,然后用這個(gè) DOM 子樹完全替換調(diào)用元素。
    3.insertAdjacentHTML() 方法接收兩個(gè)參數(shù)缕粹,插入位置和要插入的 HTML 文本稚茅。

div.innerHTML = 'hello world!';
div.innerHTML = "hello,<b>\""reader\""!</b>";
  • scrollIntoView() 方法
    該方法可以在所有 HTML 元素上調(diào)用,通過滾動(dòng)瀏覽器窗口或某個(gè)容器元素致开,調(diào)用元素就會(huì)出現(xiàn)在視口中峰锁。如果給這個(gè)方法傳入true作為參數(shù),或不傳入任何參數(shù)双戳,那么窗口滾動(dòng)之后會(huì)讓調(diào)用元素的頂部與視口頂部盡可能平齊。如傳入false作為參數(shù)糜芳,調(diào)用參數(shù)會(huì)盡可能全部出現(xiàn)在視口中飒货,可能的話,調(diào)用元的底部會(huì)與視口頂部平齊峭竣。
document.forms[0].scrollIntoView();

專有擴(kuò)展

  • 文檔模式
    IE8引進(jìn)了一個(gè)新的概念叫做“文檔模式”塘辅。頁(yè)面的文檔模式?jīng)Q定了可以使用什么功能。換句話說皆撩,文檔模式?jīng)Q定了你可以使用哪個(gè)級(jí)別的css扣墩,可以在JavaScript中使用那些api,以及如何對(duì)待文檔模式(doctype)扛吞。
    要強(qiáng)制瀏覽器以某種模式渲染頁(yè)面呻惕,可以使用 HTTP 頭部信息X-UA-Compatible,或通過等價(jià)的<meta>標(biāo)簽來設(shè)置:
<meta http-equiv="X-UA-Compatible" content="IE=IEVersion">
  • children 屬性
    該屬性是HTMLCollection的實(shí)例滥比,只包含元素中同樣還是元素的子節(jié)點(diǎn)亚脆。支持的瀏覽器是:IE5,Firefox3.5+,Safari2(有bug),Safari3盲泛,Chrome和Opera8濒持;
var childCount = element.children.length;
var firstChild = element.children[0];
  • contains() 方法
    檢測(cè)是否存在某個(gè)的后代節(jié)點(diǎn)。支持的瀏覽器是:IE寺滚,F(xiàn)irefox9.5+柑营,Safari,Chrome和Opera9+村视;
alert(document.documentElement.contains(document.body));  //true
  • 插入文本
    這兩個(gè)沒有被 HTML5 看中的屬性是innerText和outerText官套。
  • 滾動(dòng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虏杰,更是在濱河造成了極大的恐慌讥蟆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纺阔,死亡現(xiàn)場(chǎng)離奇詭異瘸彤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笛钝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門质况,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玻靡,你說我怎么就攤上這事结榄。” “怎么了囤捻?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵臼朗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蝎土,道長(zhǎng)视哑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任誊涯,我火速辦了婚禮挡毅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暴构。我一直安慰自己跪呈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布取逾。 她就那樣靜靜地躺著耗绿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菌赖。 梳的紋絲不亂的頭發(fā)上缭乘,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音琉用,去河邊找鬼堕绩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛邑时,可吹牛的內(nèi)容都是我干的奴紧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晶丘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼黍氮!你這毒婦竟也來了唐含?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤沫浆,失蹤者是張志新(化名)和其女友劉穎捷枯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专执,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淮捆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了本股。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀痊。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拄显,靈堂內(nèi)的尸體忽然破棺而出苟径,到底是詐尸還是另有隱情,我是刑警寧澤躬审,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布棘街,位于F島的核電站,受9級(jí)特大地震影響承边,放射性物質(zhì)發(fā)生泄漏蹬碧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一炒刁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誊稚,春花似錦翔始、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疾瓮,卻和暖如春脖镀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狼电。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蜒灰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肩碟。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓强窖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親削祈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翅溺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 前言 歸根結(jié)底脑漫,代碼都是思想和概念的體現(xiàn)。沒人能把一種程序設(shè)計(jì)語言的所有語法和關(guān)鍵字都記住咙崎,可以查閱參考書來解決优幸。...
    朱細(xì)細(xì)閱讀 2,935評(píng)論 4 14
  • 第1章 認(rèn)識(shí)JS JavaScript能做什么?1.增強(qiáng)頁(yè)面動(dòng)態(tài)效果(如:下拉菜單褪猛、圖片輪播网杆、信息滾動(dòng)等)2.實(shí)現(xiàn)...
    mo默22閱讀 1,290評(píng)論 0 5
  • 什么是DOM?握爷?跛璧? DOM(Document Object Model 文檔對(duì)象模型)是針對(duì)HTML和XML文檔的...
    熒惑3_3閱讀 1,390評(píng)論 0 1
  • 妹妹剛進(jìn)大學(xué),我特別不滿她的一個(gè)習(xí)慣新啼,每當(dāng)別人說了什么追城,立馬她蹦出來一個(gè)為什么。 如果她是三四歲的孩子燥撞,我會(huì)很開心...
    盒子很隨心閱讀 307評(píng)論 0 1
  • 作為一拿工資養(yǎng)家糊口的人座柱,加班熬夜十分正常。對(duì)我們夜貓子而言物舒,這里的熬夜色洞,基本是指通宵熬大夜,晚上10點(diǎn)之前...
    小波話多閱讀 886評(píng)論 0 1