DOM API 獲取元素的方式

DOM

DOM 全稱是Document Object Model带斑,即文檔對(duì)象模型全跨。

DOM的目的是為了操作文檔而產(chǎn)生的API

DOM tree

by:https://www.w3schools.com/js/pic_htmltree.gif

獲取元素的方式

總結(jié)了四種獲取方式,十一種獲取元素的具體方法

1.通過頂層document節(jié)點(diǎn)獲任颉:

通過ID選取元素

document.getElementById('elementId');

通過節(jié)點(diǎn)的ID,可以準(zhǔn)確獲得需要的元素缚忧,是比較簡(jiǎn)單快捷的方法痕钢。如果頁面上含有多個(gè)相同id的節(jié)點(diǎn),那么只返回第一個(gè)節(jié)點(diǎn)鱼冀。

jquery 中的 $("#") 與 document.getElementById("")用法大致相同

通過節(jié)點(diǎn)名獲取元素

document.getElementsByName('elements');

該方法是通過節(jié)點(diǎn)的name獲取節(jié)點(diǎn)报破,該方法返回的有同樣名稱的節(jié)點(diǎn)數(shù)組。通過要獲取節(jié)點(diǎn)的某個(gè)屬性來循環(huán)判斷是否為需要的節(jié)點(diǎn)千绪。

通過節(jié)點(diǎn)標(biāo)簽名獲取元素

document.getElementsByTagName('tagName');

該方法是通過節(jié)點(diǎn)的Tag獲取節(jié)點(diǎn)充易,該方法與document.getElementsByName()相似,同樣返回一個(gè)數(shù)組

此方法有一個(gè)缺點(diǎn):那就是返回的數(shù)組可能過于龐大,可能出現(xiàn)隱患

通過元素類名獲取元素

document.getElementsClassName('className');

它同樣返回的是一個(gè)數(shù)組,當(dāng)調(diào)用發(fā)生在document對(duì)象上時(shí), 整個(gè)DOM都會(huì)被搜索, 包含根節(jié)點(diǎn).

IE9以下不兼容

根據(jù)指定選擇器獲取元素

document.querySelector()

返回文檔中匹配指定的選擇器組的第一個(gè)元素

例子,點(diǎn)擊按鈕修改內(nèi)容

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>DOM API</title>
</head>
<body>

<p id="test">id="demo" 的 p 元素</p>
<p> 點(diǎn)擊按鈕修改上述</p>

<button id="btn">點(diǎn)我</button>
<script>
    var test = document.querySelector("#test");
    var btn = document.querySelector("#btn");
    btn.addEventListener('click',function () {
        test.innerHTML = "這就是querySelector的用法!";
    });
</script>

</body>
</html>

最終效果:



這是第一種方式:在id名前面加上#號(hào)就能使用,

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

再將第二個(gè)p元素設(shè)置名為"test2"的class,通過類名也能找到

document.querySelector("p.test2")

添加一個(gè)span元素,并設(shè)置target屬性.通過target屬性也能找到

document.querySelector("span[target]")


注意:如果沒有找到匹配元素,則返回 null荸型,如果找到多個(gè)匹配元素盹靴,則返回第一個(gè)匹配到的元素。

根據(jù)指定選擇器查找元素列表

document.querySelectorAll('#text')

返回與指定的選擇器組匹配的文檔中的元素列表瑞妇,返回的對(duì)象是NodeList

*querySelector與querySelectorAll

一個(gè)返回單個(gè)元素,另一個(gè)返回類似數(shù)組的元素集合,且倆個(gè)方法都是HTML5新加入的,總之DOM元素上調(diào)用querySelector/querySelectorAll的時(shí)候要小心稿静,最好加上ID選擇器進(jìn)行一個(gè)限定

2.通過父節(jié)點(diǎn)獲取:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>DOM API</title>
</head>
<body>

<div id="elementDiv"><div>1</div><p>DOM</p><p>BOM</p><span>Node.js</span></div>
<script>
    var elementDiv = document.getElementById('elementDiv');
    console.log(elementDiv.firstChild.nodeName);
    console.log(elementDiv.lastChild.nodeName);
    console.log(elementDiv.childNodes);

</script>
</body>
</html>

所顯示效果為:


Node.firstChild

如果有一個(gè)子節(jié)點(diǎn), childNode 是節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)的引用辕狰,否則為null改备。即指向childNodes列表中的第一個(gè)節(jié)點(diǎn)

Node.lastChild

很顯然,這個(gè)屬性是獲取已知節(jié)點(diǎn)(parentObj)的最后一個(gè)子節(jié)點(diǎn)蔓倍。與firstChild一樣悬钳,它也可以遞歸使用盐捷。

Node.childNodes

獲取已知節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)組,然后可以通過循環(huán)或者索引找到需要的節(jié)點(diǎn)默勾。同時(shí),在IE7上獲取的是直接子節(jié)點(diǎn)的數(shù)組碉渡,而在Firefox2.0.0.11上獲取的是所有子節(jié)點(diǎn)即包括子節(jié)點(diǎn)的子節(jié)點(diǎn)。

*需要注意:

為什么上述代碼中,div中的內(nèi)容非常緊湊?倘若手賤格式化代碼,那么結(jié)果將完全不同!
格式化代碼后的效果:


wtf?#text是什么鬼?我的childNodes為什么長(zhǎng)度為七,這種喜當(dāng)?shù)僮魇侨绾卧斐傻?
其實(shí)是空白符造成的,在div與第一個(gè)標(biāo)簽p當(dāng)中,若有空格或者換行符,則默認(rèn)充當(dāng)了一個(gè)文本節(jié)點(diǎn),這其中也包括換行符,制表符等等.所以此類API慎用!

3.通過臨近節(jié)點(diǎn)獲取(兄弟節(jié)點(diǎn)獲取):

修改上述例子,在第一個(gè)p標(biāo)簽設(shè)置名為'obj'的id,通過下列方式獲取兄弟節(jié)點(diǎn)

var obj = document.getElementById('obj');
console.log(obj.previousSibling);
console.log(obj.nextSibling);

效果:


Node.previousSibling

獲取已知節(jié)點(diǎn)(neighbourNode)的前一個(gè)節(jié)點(diǎn)母剥,這個(gè)屬性和前面的firstChild滞诺、lastChild一樣都似乎可以遞歸使用的。

Node.nextSibling

獲取已知節(jié)點(diǎn)(neighbourNode)的下一個(gè)節(jié)點(diǎn)环疼,同樣支持遞歸铭段。

*注意:

同樣需要注意源碼的換行符,制表符的使用!

4.通過子節(jié)點(diǎn)獲取:

<div id="elementDiv"><div>1</div><p id="obj">DOM</p><p>BOM</p><span>Node.js</span>
</div>
<script>
    var obj = document.getElementById('obj');
    console.log(obj.parentNode.nodeName);
</script>

效果:


Node.parentNode

獲取已知節(jié)點(diǎn)的父節(jié)點(diǎn)

*注意:

同樣需要注意源碼的換行符,制表符的使用!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秦爆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子憔披,更是在濱河造成了極大的恐慌等限,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芬膝,死亡現(xiàn)場(chǎng)離奇詭異望门,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锰霜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門筹误,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人癣缅,你說我怎么就攤上這事厨剪。” “怎么了友存?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵祷膳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我屡立,道長(zhǎng)直晨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任膨俐,我火速辦了婚禮勇皇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焚刺。我一直安慰自己敛摘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布檩坚。 她就那樣靜靜地躺著着撩,像睡著了一般诅福。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拖叙,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天氓润,我揣著相機(jī)與錄音,去河邊找鬼薯鳍。 笑死咖气,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挖滤。 我是一名探鬼主播崩溪,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼斩松!你這毒婦竟也來了伶唯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤惧盹,失蹤者是張志新(化名)和其女友劉穎乳幸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧椰,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粹断,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫡霞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶埋。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诊沪,靈堂內(nèi)的尸體忽然破棺而出养筒,到底是詐尸還是另有隱情,我是刑警寧澤娄徊,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布闽颇,位于F島的核電站,受9級(jí)特大地震影響寄锐,放射性物質(zhì)發(fā)生泄漏兵多。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一橄仆、第九天 我趴在偏房一處隱蔽的房頂上張望剩膘。 院中可真熱鬧,春花似錦盆顾、人聲如沸怠褐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奈懒。三九已至奠涌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磷杏,已是汗流浹背溜畅。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留极祸,地道東北人慈格。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遥金,于是被迫代替她去往敵國(guó)和親浴捆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 原文 https://www.kancloud.cn/dennis/tgjavascript/241852 一稿械、節(jié)...
    LuckyS007閱讀 854評(píng)論 0 0
  • 一选泻、基本概念 1.1、DOM DOM是JS操作網(wǎng)頁的接口美莫,全稱為“文檔對(duì)象模型”(Document Object ...
    周花花啊閱讀 3,176評(píng)論 0 6
  • 一滔金、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示)茂嗓,會(huì)使用HT...
    凜0_0閱讀 2,773評(píng)論 0 8
  • 2016年4月14日,科比退役科阎,一句“Mamba out”多少人心碎述吸。 我記得,在我很小的時(shí)候锣笨,就知道有一個(gè)叫“科...
    巨蟹座的孤獨(dú)閱讀 622評(píng)論 0 2
  • L北城以西閱讀 170評(píng)論 0 0