$11 DOM擴(kuò)展

1. 選擇符API

根據(jù)CSS選擇符選擇與某個(gè)模式匹配的DOM元素虹钮。
Selectors API的核心方法:querySelector()和querySelectorAll(),可以通過document和element類型的實(shí)例調(diào)用它們。

1.1 querySelector()方法:

接收CSS選擇符奈附,返回匹配的第一個(gè)元素,如果沒有找到怀偷,返回null宠叼。

var myDiv=document.querySelector("#myDiv");

1.2 querySelectAll()方法

返回所有匹配的元素,返回結(jié)果為NodeList實(shí)例芜赌。

    <div id="1"></div>
    <div id="2"></div>
    <div id="3"></div>
var divs=document.querySelectorAll("div");
console.log(divs);
Paste_Image.png
console.log(divs.item(0)==divs[0])//true

2. 元素遍歷

對于元素之間的空格仰挣,IE不會返回文本節(jié)點(diǎn),但是非IE會返回文本節(jié)點(diǎn)缠沈,這樣在使用firstChild等屬性時(shí)導(dǎo)致不一致膘壶。
為了解決該問題,定義了新的屬性:

childElementCount: 返回子元素(不包括文本節(jié)點(diǎn)和注釋)個(gè)數(shù)
firstElementChild: 指向第一個(gè)子元素   洲愤;firstChild的元素版颓芭。
lastElementChild: 指向最后一個(gè)子元素;lastChild的元素版柬赐。
previousElementSibling: 指向前一個(gè)同輩元素亡问;previousChild的元素版。
nextElementSibling:指向后一個(gè)同輩元素肛宋;nextChild的元素版州藕。

遍歷某元素的子元素個(gè)數(shù):

    var i=1,len;
    var child=document.body.firstElementChild;
    while(child!=document.body.lastElementChild){
        if(child.nodeType==1){
            i+=1;
        }
        child=child.nextElementSibling;
    }

3. HTML5

HTML5規(guī)范圍繞如何使用新增標(biāo)記定義了大量JS API。其中一些與DOM重疊酝陈,定義了瀏覽器需要支持的DOM擴(kuò)展床玻。

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

A. getElementByClassName()方法
B. classList屬性:便于對類名進(jìn)行操作。
<div class="bd user disabled"></div>
var div=document.getElementsByTagName("div")[0];
var classlist=div.classList;
console.log(classlist)
Paste_Image.png

方法:

add(value):添加屬性
contain(value):檢查是否存在某屬性沉帮,返回布爾值
remove(value):刪除屬性
toggle(value):如果存在锈死,刪除,不存在遇西,添加馅精。
var div=document.getElementsByTagName("div")[0];
var classlist=div.classList;
classlist.add("new");
classlist.remove("bd");
classlist.toggle("disabled");
console.log(classlist)
Paste_Image.png

3.2 焦點(diǎn)管理:

A. document.activeElement屬性

引用DOM中當(dāng)前獲取焦點(diǎn)的元素。元素獲得焦點(diǎn)的方法:頁面加載粱檀、用戶輸入洲敢、代碼中調(diào)用focus()方法。

    var button=document.getElementsByTagName("button")[0];
    button.focus();
    console.log(document.activeElement==button);//true
B. document.hasFocus屬性

檢查文檔是否獲得了焦點(diǎn)茄蚯,返回值為布爾值压彭,該值可以確定用戶是否在與頁面交互睦优。

    var button=document.getElementsByTagName("button")[0];
    button.focus();
    alert(document.hasFocus());//true

3.3 HTMLDocument的變化

A. readyState屬性

檢查文檔是否加載完畢,值:loading(正在加載),complete(加載完畢)

        if(document.readyState=="complete"){            
        }
B. 兼容模式:compatMode屬性

檢查瀏覽器渲染頁面的模式是標(biāo)準(zhǔn)模式還是混雜模式壮不。
值為CSS1Compat為標(biāo)準(zhǔn)模式汗盘,值為BackCompat為混雜模式。

    if(document.compatMode=="CSS1Compat"){
        alert("標(biāo)準(zhǔn)模式")
    }
    else {
        alert("混雜模式")
    }
C. head屬性
console.log(document.head==document.getElementsByTagName("head")[0]);//true

3.4 字符集屬性

A. document.charset返回當(dāng)前文檔的字符集询一。
B. document.defaultCharset返回默認(rèn)的字符集隐孽。

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

添加非標(biāo)準(zhǔn)屬性,需要加前綴data-健蕊,這些屬性可以通過dataset屬性進(jìn)行訪問菱阵。
<div id="myDiv" data-dd="my" data-aa="your"></div>`
       ` var div=document.getElementById("myDiv");
        console.log(div.dataset)
Paste_Image.png

3.6 插入標(biāo)記

A. innerHTML屬性

返回調(diào)用元素的所有子節(jié)點(diǎn)對應(yīng)的HTML標(biāo)記。在寫模式下缩功,會替換原有的子節(jié)點(diǎn)晴及。

<div id="myDiv">
  <p>哈哈</p>
</div>
var div=document.getElementById("myDiv");
console.log(div.innerHTML)// <p>哈哈</p>
div.innerHTML="<p>嘻嘻</p>"
console.log(div.innerHTML)//<p>嘻嘻</p>
B. outerHTML屬性

讀模式:返回該元素以及其子元素

        var div=document.getElementById("myDiv");
        console.log(div.outerHTML)
Paste_Image.png

寫模式:替換該元素

       var div=document.getElementById("myDiv");
       div.outerHTML="<p>hh</p>"http://div元素將不存在
C. insertAdjacentHTML()方法

與前兩種方式相比,加入了位置插入嫡锌,可以作為同輩元素或者子元素插入虑稼。
第一個(gè)參數(shù)的值:

beforebegin:前一個(gè)同輩元素
afterbegin:第一個(gè)子元素
beforeend:最后一個(gè)子元素
afterend:后一個(gè)同輩元素
var div=document.getElementById("myDiv");
div.insertAdjacentHTML("beforeend","<p>im</p>")
Paste_Image.png
D. 內(nèi)存與性能問題

如果使用上述替換子節(jié)點(diǎn)的方法,如果元素被刪除势木,但是該元素存在事件處理程序蛛倦,該元素與事件的綁定關(guān)系會存在于內(nèi)存中。因此最好手工刪除事件跟压。并且需要控制innerHTML和outerHTML的次數(shù)胰蝠,因?yàn)樗鼈儠?chuàng)建HTML解析器,創(chuàng)建和銷毀HTML解析器會導(dǎo)致性能損失震蒋。

4. 專有擴(kuò)展

4.1 children屬性:

只包含元素中為元素的子節(jié)點(diǎn)

4.2 contains()方法

用處:檢查某個(gè)節(jié)點(diǎn)是否是另一個(gè)節(jié)點(diǎn)的后代

        var div=document.getElementById("myDiv");
        console.log(document.documentElement.contains(div));//div是html元素的后代

4.3 插入文本

A. innerText屬性

讀:返回所有文本內(nèi)容

    <div id="myDiv">
        <p>哈哈</p>
        <p>hh</p>
    </div>
var div=document.getElementById("myDiv");
console.log(div.innerText);//哈哈  hh

寫:將其子節(jié)點(diǎn)進(jìn)行替換

        var div=document.getElementById("myDiv");
        div.innerText="替換";
        console.log(div);
Paste_Image.png

4.4 outerText屬性

作用范圍擴(kuò)大到調(diào)用節(jié)點(diǎn),當(dāng)讀時(shí)與innerText相同躲庄,寫時(shí)查剖,會替換整個(gè)元素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末噪窘,一起剝皮案震驚了整個(gè)濱河市笋庄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倔监,老刑警劉巖直砂,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浩习,居然都是意外死亡静暂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門谱秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洽蛀,“玉大人摹迷,你說我怎么就攤上這事〗脊” “怎么了峡碉?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驮审。 經(jīng)常有香客問我鲫寄,道長,這世上最難降的妖魔是什么疯淫? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任地来,我火速辦了婚禮,結(jié)果婚禮上峡竣,老公的妹妹穿的比我還像新娘靠抑。我一直安慰自己,他們只是感情好适掰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布颂碧。 她就那樣靜靜地躺著,像睡著了一般类浪。 火紅的嫁衣襯著肌膚如雪载城。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天费就,我揣著相機(jī)與錄音诉瓦,去河邊找鬼。 笑死力细,一個(gè)胖子當(dāng)著我的面吹牛睬澡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眠蚂,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼煞聪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逝慧?” 一聲冷哼從身側(cè)響起昔脯,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笛臣,沒想到半個(gè)月后云稚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沈堡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年静陈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踱蛀。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窿给,死狀恐怖贵白,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崩泡,我是刑警寧澤禁荒,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站角撞,受9級特大地震影響呛伴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谒所,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一热康、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劣领,春花似錦姐军、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至村生,卻和暖如春惊暴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趁桃。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工辽话, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卫病。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓油啤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蟀苛。 傳聞我的和親對象是個(gè)殘疾皇子村砂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

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

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情屹逛,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,752評論 2 17
  • 本章內(nèi)容 理解 Selectors API 使用 HTML5 DOM 擴(kuò)展 了解專有的 DOM 擴(kuò)展 對 DOM ...
    悶油瓶小張閱讀 575評論 0 0
  • Chapter 11 DOM 擴(kuò)展 選擇符 API (Selectors API) 目的:讓瀏覽器原生支持 CSS...
    云之外閱讀 197評論 0 0
  • 單例模式 適用場景:可能會在場景中使用到對象汛骂,但只有一個(gè)實(shí)例罕模,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見的單例模式帘瞭,...
    Obeing閱讀 2,065評論 1 10
  • 一. 基礎(chǔ)屬性 tableView style 只能在初始化中設(shè)置 @property(nonatomic, r...
    erbai閱讀 1,418評論 1 3