DOM

題目1: dom對象的innerText和innerHTML有什么區(qū)別?
innerText是一個可寫屬性,返回元素內(nèi)包含的文本內(nèi)容妇萄,在多層次的時候會按照元素由淺到深的順序拼接其內(nèi)容子寓。
innerHTML屬性作用和innerText類似,但是不是返回元素的文本內(nèi)容滑废,而是返回元素的HTML結(jié)構(gòu),在寫入的時候也會自動構(gòu)建DOM袜爪。
例如:

<div>
   <p>
       123
       <span>456</span>
   </p>
</div>

外層div的innerText返回內(nèi)容是 "123456"蠕趁。
外層div的innerHTML返回內(nèi)容是 "<p>123<span>456</span></p>"。

題目2: elem.children和elem.childNodes的區(qū)別辛馆?

  • children 屬性俺陋,非標(biāo)準的,它返回指定元素的子元素集合昙篙。經(jīng)測試腊状,它只返回HTML節(jié)點,甚至不返回文本節(jié)點苔可。和childNodes 一樣缴挖,在Firefox下不支持()取集合元素。需注意children在IE中包含注釋節(jié)點焚辅。

  • childNodes 屬性映屋,標(biāo)準的苟鸯,它返回指定元素的子元素集合,包括HTML節(jié)點棚点,所有屬性早处,文本√蔽觯可以通過nodeType來判斷是哪種類型的節(jié)點徊哑,只有當(dāng)nodeType==1時才是元素節(jié)點,2是屬性節(jié)點但壮,3是文本節(jié)點征绸。

題目3:查詢元素有幾種常見的方法?ES5的元素選擇方法是什么?

  • getElementById()
    var elem = document.getElementById("test");
    getElementById方法返回匹配指定ID屬性的元素節(jié)點甘有。如果沒有發(fā)現(xiàn)匹配的節(jié)點诉儒,則返回null。

  • getElementsByClassName()
    var elements = document.getElementsByClassName(names);
    getElementsByClassName方法返回一個類似數(shù)組的對象(HTMLCollection類型的對象)亏掀,包括了所有class名字符合指定條件的元素(搜索范圍包括本身)忱反,元素的變化實時反映在返回結(jié)果中。
    document.getElementsByClassName('red test');
    getElementsByClassName方法的參數(shù)滤愕,可以是多個空格分隔的class名字温算,返回同時具有這些節(jié)點的元素。

  • getElementsByTagName()
    var paras = document.getElementsByTagName("p");
    getElementsByTagName方法返回所有指定標(biāo)簽的元素(搜索范圍包括本身)间影。返回值是一個HTMLCollection對象注竿,也就是說,搜索結(jié)果是一個動態(tài)集合魂贬,任何元素的變化都會實時反映在返回的集合中巩割。

  • getElementsByName()
    getElementsByName方法用于選擇擁有name屬性的HTML元素,比如form付燥、img宣谈、frame、embed和object键科,返回一個NodeList格式的對象闻丑,不會實時反映元素的變化。

// 假定有一個表單是<form name="x"></form>
var forms = document.getElementsByName("x");
forms[0].tagName // "FORM"

注意勋颖,在IE瀏覽器使用這個方法嗦嗡,會將沒有name屬性、但有同名id屬性的元素也返回饭玲,所以name和id屬性最好設(shè)為不一樣的值侥祭。

  • querySelector()
    var el1 = document.querySelector(".myclass");
    var el2 = document.querySelector('#myParent > [ng-click]');
    querySelector方法返回匹配指定的CSS選擇器的元素節(jié)點。如果有多個節(jié)點滿足匹配條件,則返回第一個匹配的節(jié)點卑硫。
    querySelector方法無法選中CSS偽元素徒恋。

  • querySelectorAll()
    elementList = document.querySelectorAll(selectors);
    querySelectorAll方法返回匹配指定的CSS選擇器的所有節(jié)點,返回的是NodeList類型的對象欢伏。NodeList對象不是動態(tài)集合入挣,所以元素節(jié)點的變化無法實時反映在返回結(jié)果中。

  • elementFromPoint()
    var element = document.elementFromPoint(x, y);
    返回位于頁面指定位置的元素硝拧。參數(shù)x和y径筏,分別是相對于當(dāng)前窗口左上角的橫坐標(biāo)和縱坐標(biāo),單位是CSS像素障陶。

ES5的元素選擇方法:
querySelector()方法
querySelectorAll()方法

題目4:如何創(chuàng)建一個元素滋恬?如何給元素設(shè)置屬性?如何刪除屬性抱究。
創(chuàng)建元素:

  • createElement()
    var newDiv = document.createElement("div");
    createElement方法用來生成HTML元素節(jié)點恢氯。
    createElement方法的參數(shù)為元素的標(biāo)簽名,即元素節(jié)點的tagName屬性鼓寺。如果傳入大寫的標(biāo)簽名勋拟,會被轉(zhuǎn)為小寫。如果參數(shù)帶有尖括號(即<和>)或者是null妈候,會報錯敢靡。

  • createTextNode()
    var newContent = document.createTextNode("Hello");
    createTextNode方法用來生成文本節(jié)點,參數(shù)為所要生成的文本節(jié)點的內(nèi)容苦银。

  • createDocumentFragment()
    var docFragment = document.createDocumentFragment();
    createDocumentFragment方法生成一個DocumentFragment對象啸胧。
    DocumentFragment對象是一個存在于內(nèi)存的DOM片段,但是不屬于當(dāng)前文檔幔虏,常常用來生成較復(fù)雜的DOM結(jié)構(gòu)纺念,然后插入當(dāng)前文檔。這樣做的好處在于所计,因為DocumentFragment不屬于當(dāng)前文檔柠辞,對它的任何改動,都不會引發(fā)網(wǎng)頁的重新渲染主胧,比直接修改當(dāng)前文檔的DOM有更好的性能表現(xiàn)。

設(shè)置元素屬性:
setAttribute()

刪除屬性:
romoveAttribute()

題目5:如何給頁面元素添加子元素习勤?如何刪除頁面元素下的子元素?
添加元素:

  • appendChild()
    在元素末尾添加元素
    var newDiv = document.createElement("div");
    var newContent = document.createTextNode("Hello");
    newDiv.appendChild(newContent);

  • insertBefore()
    在某個元素之前插入元素
    var newDiv = document.createElement("div");
    var newContent = document.createTextNode("Hello");
    newDiv.insertBefore(newContent, newDiv.firstChild);

  • replaceChild()
    replaceChild()接受兩個參數(shù):要插入的元素和要替換的元素
    newDiv.replaceChild(newElement, oldElement);

刪除元素:
removeChild()
parentNode.removeChild(childNode);

題目6: element.classList有哪些方法踪栋?如何判斷一個元素的 class 列表中是包含某個 class?如何添加一個class图毕?如何刪除一個class?
方法:

  • add( String [, String] )
    添加指定的類值夷都。如果這些類已經(jīng)存在于元素的屬性中,那么它們將被忽略予颤。

  • remove( String [,String] )
    刪除指定的類值囤官。

  • item ( Number )
    按集合中的索引返回類值冬阳。

  • toggle ( String [, force] )
    當(dāng)只有一個參數(shù)時:切換 class value; 即如果類存在,則刪除它并返回false党饮,如果不存在肝陪,則添加它并返回true。
    當(dāng)存在第二個參數(shù)時:如果第二個參數(shù)的計算結(jié)果為true刑顺,則添加指定的類值氯窍,如果計算結(jié)果為false,則刪除它蹲堂。

  • contains( String )
    檢查元素的類屬性中是否存在指定的類值狼讨。

contains( String )判斷一個元素的 class 列表中是包含某個 class。

add( String [, String] )添加一個class柒竞。

remove( String [,String] )刪除一個class政供。

題目7: 如何選中如下代碼所有的li元素? 如何選中btn元素朽基?

<div class="mod-tabs">
   <ul>
       <li>list1<li>
       <li>list2<li>
       <li>list3<li>
   </ul>
   <button class="btn">點我</button>
</div>

選中所有l(wèi)i元素:
document.querySelectorAll('li')
document.getElementsByTagName('li')

選中btn元素:
document.querySelectorAll('.btn')
document.getElementsByClassName('btn')

Node與Element的區(qū)別:
Node(節(jié)點)是DOM層次結(jié)構(gòu)中的任何類型的對象的通用名稱布隔,Node有很多類型,如元素節(jié)點踩晶,屬性節(jié)點执泰,文本節(jié)點,注釋節(jié)點等渡蜻,通過NodeType區(qū)分术吝。
Element繼承了Node類,也就是說Element是Node多種類型中的一種茸苇,即當(dāng)NodeType為1時Node即為ElementNode排苍,另外Element擴展了Node,Element擁有id学密、class淘衙、children等屬性。
children是Element的屬性腻暮,childNodes是Node的屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彤守,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哭靖,更是在濱河造成了極大的恐慌具垫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试幽,死亡現(xiàn)場離奇詭異筝蚕,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門起宽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲胖,“玉大人,你說我怎么就攤上這事坯沪÷逃常” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵屏箍,是天一觀的道長绘梦。 經(jīng)常有香客問我,道長赴魁,這世上最難降的妖魔是什么卸奉? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮颖御,結(jié)果婚禮上榄棵,老公的妹妹穿的比我還像新娘。我一直安慰自己潘拱,他們只是感情好疹鳄,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芦岂,像睡著了一般瘪弓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禽最,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天腺怯,我揣著相機與錄音,去河邊找鬼川无。 笑死呛占,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懦趋。 我是一名探鬼主播晾虑,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仅叫!你這毒婦竟也來了帜篇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诫咱,失蹤者是張志新(化名)和其女友劉穎坠狡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遂跟,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了幻锁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凯亮。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哄尔,靈堂內(nèi)的尸體忽然破棺而出假消,到底是詐尸還是另有隱情,我是刑警寧澤岭接,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布富拗,位于F島的核電站,受9級特大地震影響鸣戴,放射性物質(zhì)發(fā)生泄漏啃沪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一窄锅、第九天 我趴在偏房一處隱蔽的房頂上張望创千。 院中可真熱鬧,春花似錦入偷、人聲如沸追驴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殿雪。三九已至,卻和暖如春锋爪,著一層夾襖步出監(jiān)牢的瞬間丙曙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工几缭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留河泳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓年栓,卻偏偏與公主長得像拆挥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子某抓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 節(jié)點屬性 Node.nodeName //返回節(jié)點名稱纸兔,只讀 Node.nodeType //返回節(jié)點類型的常數(shù)值...
    吳博閱讀 491評論 0 0
  • 基本介紹 文檔對象模型 (DOM) 是HTML和XML文檔的編程接口。它給文檔(結(jié)構(gòu)樹)提供了一個結(jié)構(gòu)化的表述并且...
    草鞋弟閱讀 438評論 0 0
  • 本文整理自《高級javascript程序設(shè)計》 DOM(文檔對象模型)是針對HTML和XML文檔的一個API(應(yīng)用...
    SuperSnail閱讀 580評論 0 1
  • 題目1: dom對象的innerText和innerHTML有什么區(qū)別否副? innerText是一個可寫屬性汉矿,返回元...
    QQQQQCY閱讀 185評論 0 0
  • 前幾天和好友聊天性格問題,說自己性子急备禀,然而我覺得只要不過份性子急洲拇,這個性格并無不好奈揍,急性子的職場人行動力都比較強...
    莉莉說閱讀 377評論 0 3