DOM拓展

一.選擇符API

1.querySelector()方法

接受一個(gè)CSS選擇符竖瘾,返回一個(gè)與這個(gè)模式匹配的第一個(gè)元素酒来,如果沒有酝陈,則返回null

//取得body元素
var body = document.querySelector("body")
//取得id為myId的元素
var myId = document.querySelector("#myId")
//取得class為.selected的第一個(gè)元素
var selected = document.querySelector(".selected")

2.querySelectorAll()方法

接受一個(gè)CSS選擇符涛癌,返回一個(gè)與這個(gè)模式匹配的所有元素的NodeList實(shí)例,如果沒有匹配元素势腮,返回空Nodelist實(shí)例

//取得id為myDiv里面所有的<em>元素
var ems = document.getElementById("myDiv").querySelectorAll("em")
//取得class為.selecteds的所有元素
var selecteds = document.querySelectorAll(".selected")

3.matchesSelector()方法

接受一個(gè)CSS選擇符,如果調(diào)用元素與該選擇符匹配漫仆,返回true捎拯,否則返回false

if(document.body.matchesSelector("body.page1")){
    //true
}

兼容行問題:這個(gè)方法支持IE9+,F(xiàn)irefox 3.6+盲厌,而Safari 5+和Chrome要通過wbkitMatchesSelector()

二.元素遍歷

為什么會(huì)提到這個(gè)問題署照?其實(shí)是 對于元素之間的空格,IE9以及之前的版本是不會(huì)返回文本節(jié)點(diǎn)的吗浩,這就導(dǎo)致了childNodes還有firstChild屬性行為不一致建芙,為解決這一問題,Element Traversal規(guī)范定義了一組屬性

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

兼容行問題:Element Traversal規(guī)范支持IE9+懂扼,F(xiàn)irefox 3.5+禁荸,而Safari 4+和Chrome Opera 10+

三.HTML5

DOM擴(kuò)展,為什么涉及到H5阀湿?赶熟??
其實(shí)是H5新增了標(biāo)記炕倘,H5規(guī)范圍繞這些新增標(biāo)簽定義了大量的JavaScript API, 一些API與DOM重疊

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

getElementByClassName()方法

接受一個(gè)包含一個(gè)或者多個(gè)類名的字符串钧大,返回帶有指定類的所有元素的NodeList實(shí)例,傳入類名順序不重要

//獲取所有類中包含username和current的元素 罩旋,類名順尋無所謂
var eles = document.getElementByClassName("username current")

兼容行問題:這個(gè)方法支持IE9+啊央,F(xiàn)irefox 3+,而Safari 3.1+和Chrome Opera 9.5+

classList屬性

我們操作元素的類名時(shí)涨醋,通過className屬性來增加瓜饥,刪除,修改類型浴骂,但是如果我們只是想對某一個(gè)類名操作乓土,只有className的話,想一下過程溯警,通過className獲取到類名字符串趣苏,對字符串修改,改完在通過className重新設(shè)計(jì)梯轻,復(fù)雜食磕,針對這一點(diǎn),H5新增了一些操作類名的方法:
它為所有元素添加了 classList屬性 喳挑,這個(gè)屬性是新集合類型DOMTokenlist的實(shí)例彬伦,DOMTokenlist滔悉,也有l(wèi)ength屬性,取得每個(gè)元素可以使用 item()方法也可以使用方括號单绑,還定義了一些方法

  • add(value) 把給定的值添加到列表中回官,如果已經(jīng)存在,不添加
  • contain(value) 查看列表中存在給定的值嗎搂橙,存在返回true歉提,不存在返回false
  • remove(value) 從列表中刪除字符串
  • toggle(value) 如果列表中已存在給定值,刪除区转,如果列表中不存在唯袄,添加

兼容行問題:classList屬性支持Firefox 3.6+和Chrome

2.焦點(diǎn)管理

document.activeElement屬性 :始終引用DOM當(dāng)前獲取焦點(diǎn)的元素
元素獲取焦點(diǎn)的方式:1.頁面加載(頁面加載中,document.activeElement為null蜗帜,加載結(jié)束為documen.body)
2.用戶輸入3.代碼調(diào)用focus()方法時(shí)

3.HTMLDocument的變化

readyState屬性

有兩個(gè)可能的值:

loading,正在加載文檔
complete 已經(jīng)加載完文檔

用它來作為一個(gè)文檔加載完成的指示器:

if(document.readyState == 'complete'){
//執(zhí)行的操作
}
兼容模式

IE6給了document一個(gè)compatMode的屬性:告訴開發(fā)人員瀏覽器采用了那種渲染模式

CSS1Compat资厉,標(biāo)準(zhǔn)模式
BackCompat 混雜模式

head屬性

document.head 引用文檔的<head>元素

var head = document.head || document.getElementByTagName("head")[0]

4.字符集屬性

document.charset :文檔中使用的字符集
defaultCharset :默認(rèn)瀏覽器以及操作系統(tǒng)的設(shè)置

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

H5規(guī)定可以為元素添加非標(biāo)準(zhǔn)屬性厅缺,但是添加前綴 data- 可以隨意添加,隨意命名哦

<div id = "myDiv" data-appId = "12345" data-name ="nike"></div>

訪問自定義屬性的值宴偿,通過dataset屬性來訪問湘捎,它是DOMStringMap的實(shí)例,是一個(gè)名值對兒的映射

var div = document.getElementById("myDiv")
//獲取值
var appId =div.dataset.appId
//設(shè)置值
div.dataset.appId ==23456

6.插入標(biāo)記

innerHTML

在讀模式下窄刘,innerHTML屬性返回與調(diào)用元素的所有子節(jié)點(diǎn)(包括元素 注釋 和文本節(jié)點(diǎn))對應(yīng)的HTML標(biāo)記
在寫模式下窥妇,innerHTML會(huì)根據(jù)指定的值創(chuàng)建新的DOM樹,然后用這個(gè)DOM樹完全替換調(diào)用元素原先的所有子節(jié)點(diǎn)

 <div id="myDiv">
      <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
      </ul>

    </div>


var div = document.getElementById("myDiv")
div.innerHTML = "hello world"


//以上操作之后的dom的結(jié)構(gòu)   等于下面
  <div id="myDiv">
      hello world

    </div>

outerHTML屬性

在讀模式下娩践,innerHTML屬性返回與調(diào)用它的元素以及所有子節(jié)點(diǎn)(包括元素 注釋 和文本節(jié)點(diǎn))對應(yīng)的HTML標(biāo)記
在寫模式下活翩,innerHTML會(huì)根據(jù)指定的值創(chuàng)建新的DOM樹,然后用這個(gè)DOM樹完全替換調(diào)用元素

 <div class="content">
      <ul  id=”myP“>
        <li>1</li>
        <li>2</li>
        <li>3</li>
      </ul>

    </div>


var div = document.getElementById("myP")
div.outerHTML = "  <p>this is a pa</p>"


//以上操作之后的dom的結(jié)構(gòu)   等于下面
  <div class="content">
      <p>this is a pa</p>
    </div>

insertAdjacentHTML()方法

接受兩個(gè)參數(shù):插入位置和要插入的HTML文本

  • beforebegin 在當(dāng)前元素之前插入一個(gè)緊鄰的同輩元素
  • afterbegin 在當(dāng)前元素之下插入一個(gè)新的元素或在第一個(gè)子元素之前再插入新的新元素
  • beforebeend 在當(dāng)前元素之下插入一個(gè)新的元素或在第一個(gè)子元素之后再插入新的新元素
  • afterend 在當(dāng)前元素之前插入一個(gè)緊鄰的同輩元素

四.專有擴(kuò)展

contains()方法 :當(dāng)我們需要知道某個(gè)節(jié)點(diǎn)是不是另一個(gè)節(jié)點(diǎn)的后代

接受一個(gè)參數(shù)翻伺,即要檢測的后代節(jié)點(diǎn)

//true
alter(document.documentElement.contains(document.body))
innerText 屬性

在讀模式下材泄,innerText屬性返回與調(diào)用元素的所有文本元素,包含子文檔中的文本
在寫模式下吨岭,innerText會(huì)刪除元素所有子節(jié)點(diǎn)拉宗,插入包含相應(yīng)文本值的文本節(jié)點(diǎn)

outerText 屬性

在讀模式下,outerText屬性返回與調(diào)用元素的所有文本元素辣辫,包含子文檔中的文本
在寫模式下旦事,outerText會(huì)替換整個(gè)元素(包括子元素)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市急灭,隨后出現(xiàn)的幾起案子姐浮,更是在濱河造成了極大的恐慌,老刑警劉巖化戳,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单料,死亡現(xiàn)場離奇詭異埋凯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扫尖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門白对,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人换怖,你說我怎么就攤上這事甩恼。” “怎么了沉颂?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵条摸,是天一觀的道長。 經(jīng)常有香客問我铸屉,道長钉蒲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任彻坛,我火速辦了婚禮顷啼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昌屉。我一直安慰自己钙蒙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布间驮。 她就那樣靜靜地躺著躬厌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竞帽。 梳的紋絲不亂的頭發(fā)上扛施,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音屹篓,去河邊找鬼煮嫌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抱虐,可吹牛的內(nèi)容都是我干的昌阿。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼恳邀,長吁一口氣:“原來是場噩夢啊……” “哼懦冰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谣沸,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刷钢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乳附,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體内地,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伴澄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阱缓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非凌。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荆针,靈堂內(nèi)的尸體忽然破棺而出敞嗡,到底是詐尸還是另有隱情,我是刑警寧澤航背,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布喉悴,位于F島的核電站,受9級特大地震影響玖媚,放射性物質(zhì)發(fā)生泄漏箕肃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一今魔、第九天 我趴在偏房一處隱蔽的房頂上張望突雪。 院中可真熱鬧,春花似錦涡贱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘀粱,卻和暖如春激挪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锋叨。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工垄分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娃磺。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓薄湿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親偷卧。 傳聞我的和親對象是個(gè)殘疾皇子豺瘤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350