DOM操作

1: dom對象的innerText和innerHTML有什么區(qū)別龟糕?

  • innerText:當使用innerText讀取值時浅蚪,如果有HTML標簽朦促,它會過濾掉HTML標簽叉信,并且按照由淺入深的順序?qū)⑺械奈谋酒唇悠饋怼?br> 當使用innerText寫入值時置媳,結(jié)果會刪除dom對象的所有子節(jié)點于樟,插入包含的相應文本值的文本節(jié)點。如果有HTML標簽拇囊,它會對HTML語法字符(小于號迂曲、大于號、引號及和號等)進行編碼寥袭,使HTML標簽以正常的文本形式出現(xiàn)在dom對象中路捧。舉例:
<<body>
<div id="content">
   <p>This is a <strong>test</strong> paragraph</p>
   <ul>
       <li>1</li>
       <li>2</li>
       <li>3</li>
   </ul>
</div>
</body>
<script>
var oDiv = document.getElementById("content");
console.log(oDiv.innerText);
oDiv.innerText = "<h2>Hello & <strong>hunger</strong></h2>";

innerText運行結(jié)果

  • innerHTML當使用innerHTML讀取值時,返回dom對象的所有子節(jié)點(包括元素传黄、注釋和文本節(jié)點)對應的HTML標記杰扫。
    當使用innerHTML寫入值時,會根據(jù)寫入的值創(chuàng)建新的DOM樹膘掰,然后用這個DOM樹完全替換原先所有的子節(jié)點章姓。舉例
body>
<div id="content">
    <p>This is a <strong>test</strong> paragraph</p>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>
</body>
<script>
var oDiv = document.getElementById("content");
console.log(oDiv.innerHTML);
oDiv.innerHTML = "<h2>Hello & <strong>hunger</strong></h2>";

innerHTML運行結(jié)果.png

那么總而言之:innerHTML是一種插入HTML字符的方法,所以它會根據(jù)標簽生成DOM樹识埋,而innerText是一種插入文本的方法凡伊,所以它會過濾掉標簽。

2: elem.children和elem.childNodes的區(qū)別惭聂?

  • elem.children:獲取元素的所有子節(jié)點dom對象窗声,不包含自身的文本內(nèi)容;
  • elem.childNodes:獲取元素的所有子節(jié)點對象辜纲,包含自身的文本內(nèi)容笨觅;
  • elem.childNodes:會把子節(jié)點和父標簽間的空格當作文本內(nèi)容拦耐;

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

  • getElementById()
    getElementById方法返回匹配指定ID屬性的元素節(jié)點见剩。如果沒有發(fā)現(xiàn)匹配的節(jié)點杀糯,則返回null。這也是獲取一個元素最快的方法
var elem = document.getElementById("test");
  • getElementsByClassName()
    getElementsByClassName方法返回一個類似數(shù)組的對象(HTMLCollection類型的對象)苍苞,包括了所有class名字符合指定條件的元素(搜索范圍包括本身)固翰,元素的變化實時反映在返回結(jié)果中。這個方法不僅可以在document對象上調(diào)用羹呵,也可以在任何元素節(jié)點上調(diào)用骂际。
var elements = document.getElementsByClassName(names);

getElementsByClassName方法的參數(shù),可以是多個空格分隔的class名字冈欢,返回同時具有這些節(jié)點的元素歉铝。

document.getElementsByClassName('red  test');
  • getElementsByTagName()
    getElementsByTagName方法返回所有指定標簽的元素(搜索范圍包括本身)。返回值是一個HTMLCollection對象凑耻,也就是說太示,搜索結(jié)果是一個動態(tài)集合,任何元素的變化都會實時反映在返回的集合中香浩。這個方法不僅可以在document對象上調(diào)用类缤,也可以在任何元素節(jié)點上調(diào)用。
var paras = document.getElementsByTagName("p");

上面代碼返回當前文檔的所有p元素節(jié)點邻吭。
注意餐弱,getElementsByTagName方法會將參數(shù)轉(zhuǎn)為小寫后,再進行搜索镜盯。

  • 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屬性最好設為不一樣的值真慢。

ES5的元素選擇方法

  • querySelector()
    querySelector方法返回匹配指定的CSS選擇器的元素節(jié)點。如果有多個節(jié)點滿足匹配條件理茎,則返回第一個匹配的節(jié)點黑界。如果沒有發(fā)現(xiàn)匹配的節(jié)點管嬉,則返回null。
var el1 = document.querySelector(".myclass");
var el2 = document.querySelector('#myParent > [ng-click]');

注意:querySelector方法無法選中CSS偽元素朗鸠。

  • querySelectorAll()
    querySelectorAll方法返回匹配指定的CSS選擇器的所有節(jié)點蚯撩,返回的是NodeList類型的對象。NodeList對象不是動態(tài)集合烛占,所以元素節(jié)點的變化無法實時反映在返回結(jié)果中胎挎。
elementList = document.querySelectorAll(selectors);
querySelectorAll方法的參數(shù),可以是逗號分隔的多個CSS選擇器忆家,返回所有匹配其中一個選擇器的元素犹菇。

var matches = document.querySelectorAll("div.note, div.alert");
上面代碼返回class屬性是note或alert的div元素。

4:如何創(chuàng)建一個元素芽卿?如何給元素設置屬性项栏?如何刪除屬性

  • 創(chuàng)建元素
  • createElement()
    createElement方法的參數(shù)為元素的標簽名,即元素節(jié)點的tagName屬性蹬竖。
var newDiv = document.createElement('div');

createElement方法的參數(shù)為元素的標簽名沼沈,即元素節(jié)點的tagName屬性。如果傳入大寫的標簽名币厕,會被轉(zhuǎn)為小寫列另。如果參數(shù)帶有尖括號(即<和>)或者null,會報錯旦装。

  • createTextNode()
    createTextNode方法用來生成文本節(jié)點页衙,參數(shù)為所要生成的文本節(jié)點的內(nèi)容;
var newDiv = document.createElement('div');
var newContent = document.createTextNode('hello');
newDive.appendChild(newContent);

上面代碼新建一個div節(jié)點和一個文本節(jié)點

  • createDocumentFragment()
createDocumentFragment方法生成一個DocumentFragment對象阴绢。

var docFragment = document.createDocumentFragment();
DocumentFragment對象是一個存在于內(nèi)存的DOM片段店乐,但是不屬于當前文檔,常常用來生成較復雜的DOM結(jié)構(gòu)呻袭,然后插入當前文檔眨八。這樣做的好處在于,因為DocumentFragment不屬于當前文檔左电,對它的任何改動廉侧,都不會引發(fā)網(wǎng)頁的重新渲染,比直接修改當前文檔的DOM有更好的性能表現(xiàn)篓足。

  • 設置元素的屬性
    setAttribute()
    setAttribute()方法用于設置元素屬性
var node = document.getElementById("div1");
node.setAttribute("my_attrib", "newVal");

等同于

var node = document.getElementById("div1");
var a = document.createAttribute("my_attrib");
a.value = "newVal";
node.setAttributeNode(a);

刪除屬性
romoveAttribute()
removeAttribute()用于刪除元素屬性

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);

6: element.classList有哪些方法?如何判斷一個元素的 class 列表中是包含某個 class栈拖?如何添加一個class连舍?如何刪除一個class?

element.classList的方法

add():增加一個class。
remove():移除一個class涩哟。
contains():檢查當前元素是否包含某個class索赏。
toggle():將某個class移入或移出當前元素诗鸭。
item():返回指定索引位置的class。
toString():將class的列表轉(zhuǎn)為字符串参滴。

具體應用

myDiv.classList.add('myCssClass');//在myDiv元素上添加一個class
myDiv.classList.add('foo', 'bar');
myDiv.classList.remove('myCssClass');//刪除myDiv元素中名為myCssClass的class
myDiv.classList.toggle('myCssClass'); // 如果myCssClass不存在就加入强岸,否則移除
myDiv.classList.contains('myCssClass'); // 返回 true 或者 false
myDiv.classList.item(0); // 返回第一個Class
myDiv.classList.toString();

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元素
var getbytagname = document.getElementsByTagName('li');
或
var getbyqueryall = document.querySelectorAll('li');
如何選中btn元素
document.getElementsByClassName('btn')
或
document.querySelector('.btn')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝌箍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子暴心,更是在濱河造成了極大的恐慌妓盲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件专普,死亡現(xiàn)場離奇詭異悯衬,居然都是意外死亡,警方通過查閱死者的電腦和手機檀夹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門筋粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炸渡,你說我怎么就攤上這事娜亿。” “怎么了蚌堵?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵买决,是天一觀的道長。 經(jīng)常有香客問我吼畏,道長督赤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任泻蚊,我火速辦了婚禮躲舌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藕夫。我一直安慰自己孽糖,他們只是感情好枯冈,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布毅贮。 她就那樣靜靜地躺著,像睡著了一般尘奏。 火紅的嫁衣襯著肌膚如雪滩褥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天炫加,我揣著相機與錄音瑰煎,去河邊找鬼铺然。 笑死,一個胖子當著我的面吹牛酒甸,可吹牛的內(nèi)容都是我干的魄健。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼插勤,長吁一口氣:“原來是場噩夢啊……” “哼沽瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起农尖,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤析恋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盛卡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體助隧,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年滑沧,在試婚紗的時候發(fā)現(xiàn)自己被綠了并村。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡滓技,死狀恐怖橘霎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殖属,我是刑警寧澤姐叁,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站洗显,受9級特大地震影響外潜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挠唆,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一处窥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玄组,春花似錦滔驾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至患膛,卻和暖如春摊阀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工胞此, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臣咖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓漱牵,卻偏偏與公主長得像夺蛇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酣胀,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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

  • 基本介紹 文檔對象模型 (DOM) 是HTML和XML文檔的編程接口蚊惯。它給文檔(結(jié)構(gòu)樹)提供了一個結(jié)構(gòu)化的表述并且...
    草鞋弟閱讀 439評論 0 0
  • 1.概述 1.1DOM DOM是JavaScript操作網(wǎng)頁的接口,全稱為“文檔對象模型”(Document Ob...
    徐國軍_plus閱讀 376評論 0 3
  • 節(jié)點 節(jié)點類型 每個節(jié)點都有一個 nodeType 屬性灵临,用于表示節(jié)點類型截型。nodeType 屬性返回節(jié)點的類型。...
    練曉習閱讀 448評論 0 4
  • 1儒溉、 dom對象的innerText和innerHTML有什么區(qū)別宦焦? innerText是一個可寫屬性,返回元素內(nèi)...
    zh_yang閱讀 327評論 0 0
  • 如此的有原因的不愉快顿涣。心態(tài)有失衡的跡象波闹。已得到充分的證明的是,心和胃真的離得很近涛碑,不開心了怎樣哄騙也沒有胃口的精堕。
    倪飛飛飛飛飛閱讀 181評論 0 0