DOM相關操作

  • DOM對象的innerText和innerHTML有什么區別?

共同點:innerHTML和innerText是doctument對象的屬性,都可以用來讀取一個元素的內容。
區別1:對于一個單行無嵌套的元素,innerHTML和innerText得到的結果是相同的;

<!DOCTYPE html>
<html>
   <head>
        <meta charset="utf-8">
        <title>JS Bin</title>
   </head>
    <body>
        <p>A test!</p>
    </body>
</html>  //innerText、innerHTML獲取<p>,結果都是相同的;

區別2:對于多行或有嵌套的元素,innerHTML會獲取從開始標簽到結束標簽中的所有內容,包括子元素標簽,返回整個HTML結構;innerText會獲取從開始標簽到結束標簽中的所有內容,但不包括子元素標簽,并把內容拼湊在一行;

<div>
    <p>
        123
        <span>456</span>
    </p>
</div>
<!-- 
 <div>innerHTML返回:
 "
   <p>
        123
        <span>456</span>
    </p>
" -->
<!-- 
 <div>innerText返回:
"123 456"
 -->
  • elem.children和elem.childNodes的區別?

相同點:elem.children和elem.childNodes都可以以類數組的形式返回子元素節點;
區別1:elem.children返回的類數組是HTMLCollection,elem.childNodes返回的類數組是NodeList;
區別2:elem.children只包含元素節點,elem.childNodes包含元素節點、文本節點、注釋節點等。

  • 查詢元素有幾種常見的方法?ES5的元素選擇方法是什么?

1.getElementById():通過元素的id屬性查詢元素,若不存在,則返回null;

<p id="test">aa<p>
var a = document.getElementById("test") //獲取到id="test"的p元素;

2.getElementsByClassName():返回一個類數組的對象HTMLCollection,包括了所有class名字符合指定條件的元素(搜索范圍包括本身),參數可以是多個空格分隔的class名字,返回同時具有這些節點的元素,元素的變化實時反映在返回結果中。:

document.getElementsByClassName('nav layout'); //獲取擁有class為nav、layout的所有元素

3.getElementsByTagName():返回所有指定標簽的元素(搜索范圍包括本身)。返回值是一個HTMLCollection類數組,搜索結果是一個動態集合,任何元素的變化都會實時反映在返回的集合中:

var paras = document.getElementsByTagName("h1"); //匹配所有的h1元素;

4.getElementsByName():用于選擇擁有name屬性的HTML元素,比如img、form等,返回一個NodeList格式的對象,不會實時反映元素的變化;

![](#)
var img = document.getElementsByName("pic");

5.querySelector():ES5新增方法,返回匹配指定的CSS選擇器的元素節點。如果有多個節點滿足匹配條件,則返回第一個匹配的節點。如果沒有發現匹配的節點,則返回null;

document.querySelector(".box1") //匹配class為box1的元素(若有多個,返回第一個);

6.querySelectorAll():與querySelector()類似,返回匹配指定的CSS選擇器的所有節點,返回的是NodeList類型的對象。NodeList對象不是動態集合,所以元素節點的變化無法實時反映在返回結果中;

document.querySelector(".box1") //匹配class為box1的所有元素;
  • 如何創建一個元素?如何給元素設置屬性?如何刪除屬性?

創建元素:
createElement():可以生成HTML元素節點;

var newDiv = document.createElement("div"); //創建了一個div;

設置元素屬性:
setAttribute():為一個元素設定屬性值,若屬性不存在,則創建這個屬性,并設值;

var p = document.getElementById("title")
p.setAttribute("class","layout") //第一個參數是屬性名,第二個為屬性值,用逗號分隔;

刪除屬性:
removeAttribute(): 刪除一個元素的指定屬性;

var p = document.getElementById("title");
p.removeAttribute("id"); // 刪除p元素的id屬性;
  • 如何給頁面元素添加子元素?如何刪除頁面元素下的子元素?

給頁面元素添加子元素:
1.appendChild():在父元素的末尾添加子元素;

<div id="box"></div>    //已知一個div元素;
var p = createElement("p");    //創建一個p元素;
var div = getElementById("box");    // 通過id獲取div元素;
div.appendChild(p);    //將p元素添加到div中;

2.insertBefore():在某個元素之前插入元素;

<div id="box">
    <a href=""></a>
</div>
var p = createElement("p");
var div = getElementById("box");
div.insertBefore(p,div.firstchid); //在div第一個子元素前插入p元素;

3.replaceChild():用于替換元素,參數為要插入的元素和要替換的元素,逗號分隔;

刪除頁面元素下的子元素:
removeChild():刪除參數指定的子元素,參數為子元素的節點對象(childNode);

var list=document.getElementById("myList");
list.removeChild(list.childNodes[0]); //刪除list下第一個子元素;
  • element.classList有哪些方法?如何判斷一個元素的 class 列表中是包含某個 class?如何添加一個class?如何刪除一個class?

element.classList返回屬性的類名,有這么幾個屬性和方法:
1.length:返回元素類名的個數,只讀;
2.item():支持一個參數,為類名的索引,返回對應的類名;

<body class="a b c"></body>
document.body.classList.item(0) //  得到a;

3.add():接受一個class名字符串作為參數,把該class名添加到元素上,若已存在,則忽略;

document.body.classList.add("d")
document.body.classList.contains("d") // ture;

4.remove() :接受一個class名字符串作為參數,把該class從元素上移除;

document.body.classList.remove("c");
document.body.classList.contains("c");  // false;

5.contains():接受一個class名字符串作為參數,驗證元素的class列表中是否包含該class,返回布爾值;

document.body.classList.contains("a") // ture;

6.toggle():接受2個參數,第一個為class名字符串,第二個為布爾值,如果為true表示添加該class,如果為false則表示移除該class,并返回該Boolean值。

  • 如何選中如下代碼所有的li元素? 如何選中btn元素?

<div class="mod-tabs">
   <ul>
       <li>list1</li>
       <li>list2</li>
       <li>list3</li>
   </ul>
   <button class="btn">點我</button>
</div>
//獲取li
//方法1
document.querySelectorAll('li');
//方法2
document.getElementsByTagName('li');

 //獲取btn
//方法1
document.getElementsByClassName('btn');
//方法2
document.querySelector('.btn')
//方法3
document.getElementsByTagName('button');
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • 題目1: dom對象的innerText和innerHTML有什么區別? innerText是一個可寫屬性,返回元...
    Taaaaaaaurus閱讀 214評論 0 1
  • 題目1: dom對象的innerText和innerHTML有什么區別? innerText是一個可寫屬性,返回元...
    QQQQQCY閱讀 196評論 0 0
  • 基本介紹 文檔對象模型 (DOM) 是HTML和XML文檔的編程接口。它給文檔(結構樹)提供了一個結構化的表述并且...
    草鞋弟閱讀 450評論 0 0
  • 題目1: dom對象的innerText和innerHTML有什么區別? innerText是一個可寫屬性,返回元...
    我七閱讀 435評論 0 0
  • 每個人的青春都值得懷念,趁還沒有忘記,寫一段故事…… ??? 這是一個真實的故事,每個人都曾經...
    GYJ云中漫步閱讀 262評論 0 1