【總結】Javascript操作DOM常用API詳解

2021-03-02 SegmentFault

文本整理了 javascript操作 DOM的一些常用的 api,根據其作用整理成為創建,修改,查詢等多種類型的 api,主要用於複習基礎知識,加深對原生 js的認識。

基本概念

在講解操作DOM的api之前,首先我們來複習一下一些基本概念,這些概念是掌握api的關鍵,必須理解它們。

Node類型

DOM1級定義了一個Node接口,該接口由DOM中所有節點類型實現。這個Node接口在JS中是作為Node類型實現的。在IE9以下版本無法訪問到這個類型,JS中所有節點都繼承自Node類型,都共享著相同的基本屬性和方法。

每個節點都有一個nodeType屬性,用於表明節點的類型。節點類型由在Node類型中定義的下列12個數值常量來表示,任何節點類型必居其一:

Node.ELEMENT_NODE:1

Node.ATTRIBUTE_NODE:2

Node.TEXT_NODE:3

Node.CDATA_SECTION_NODE:4

Node.ENTITY_REFERENCE_NODE:5

Node.ENTITY_NODE:6

Node.PROCESSING_INSTRUCTION_NODE:7

Node.COMMENT_NODE:8

Node.DOCUMENT_NODE:9

Node.DOCUMENT_TYPE_NODE:10

Node.DOCUMENT_FRAGMENT_NODE:11

Node.NOTATION_NODE:12

假設我們要判斷一個Node是不是元素,我們可以這樣判斷:

if(someNode.nodeType == 1){

   console.log("Node is a element");

}

開發人員最常用的就是元素和文本節點。

這些Node類型中,我們最常用的就是 element, text, attribute, comment, document, document_fragment這幾種類型。我們簡單來介紹一下這幾種類型:

Element類型

Element提供了對元素標籤名,子節點和特性的訪問,我們常用HTML元素比如div,span,a等標籤就是element中的一種。Element有下面幾條特性:(1)nodeType為1(2)nodeName為元素標籤名,tagName也是返回標籤名(3)nodeValue為null(4)parentNode可能是Document或Element(5)子節點可能是Element,Text,Comment,Processing_Instruction,CDATASection或EntityReference

Text類型

Text表示文本節點,它包含的是純文本內容,不能包含html代碼,但可以包含轉義後的html代碼。Text有下面的特性:(1)nodeType為3(2)nodeName為#text(3)nodeValue為文本內容(4)parentNode是一個Element(5)沒有子節點

Attr類型

Attr類型表示元素的特性,相當於元素的attributes屬性中的節點,它有下面的特性:(1)nodeType值為2(2)nodeName是特性的名稱(3)nodeValue是特性的值(4)parentNode為null

Comment類型

Comment表示HTML文檔中的注釋,它有下面的幾種特徵:(1)nodeType為8(2)nodeName為#comment(3)nodeValue為注釋的內容(4)parentNode可能是Document或Element(5)沒有子節點

Document

Document表示文檔,在瀏覽器中,document對象是HTMLDocument的一個實例,表示整個頁面,它同時也是window對象的一個屬性。Document有下面的特性:(1)nodeType為9(2)nodeName為#document(3)nodeValue為null(4)parentNode為null(5)子節點可能是一個DocumentType或Element

DocumentFragment類型

DocumentFragment是所有節點中唯一一個沒有對應標記的類型,它表示一種輕量級的文檔,可能當作一個臨時的倉庫用來保存可能會添加到文檔中的節點。DocumentFragment有下面的特性:(1)nodeType為11(2)nodeName為#document-fragment(3)nodeValue為null(4)parentNode為null

我們簡單地介紹了幾種常見的Node類型,要記住,HTML中的節點並不只是包括元素節點,它還包括文本節點,注釋節點等等。在這裡我們只是簡單地說明了幾種常見的節點,想要進一步學習的同學可以查找一下相關資料。

節點創建型api

在這裡,我將常用的DOM操作api進行分類,首先要介紹的是創建型的api。這一類型的api,簡而言之就是用來創建節點的。

createElement

createElement通過傳入指定的一個標籤名來創建一個元素,如果傳入的標籤名是一個未知的,則會創建一個自定義的標籤,注意:IE8以下瀏覽器不支持自定義標籤。使用如下:

var div = document.createElement("div");

使用createElement要注意:通過createElement創建的元素並不屬於html文檔,它只是創建出來,並未添加到html文檔中,要調用appendChild或insertBefore等方法將其添加到HTML文檔樹中。

createTextNode

createTextNode用來創建一個文本節點,用法如下:

var textNode = document.createTextNode("一個TextNode");

createTextNode接收一個參數,這個參數就是文本節點中的文本,和createElement一樣,創建後的文本節點也只是獨立的一個節點,同樣需要appendChild將其添加到HTML文檔樹中。

cloneNode

cloneNode是用來返回調用方法的節點的一個副本,它接收一個 bool參數,用來表示是否複製子元素,使用如下:

var parent = document.getElementById("parentElement");

var parent2 = parent.cloneNode(true);// 傳入true

parent2.id = "parent2";

這段代碼通過cloneNode複製了一份parent元素,其中cloneNode的參數為true,表示parent的子節點也被複製,如果傳入false,則表示只複製了parent節點。

我們看看這個例子:

<div id="parent">

   我是父元素的文本

   <br/>

   <span>

       我是子元素

   </span>

</div>

<button id="btnCopy">複製</button>

var parent = document.getElementById("parent");

document.getElementById("btnCopy").onclick = function(){

   var parent2 = parent.cloneNode(true);

   parent2.id = "parent2";

   document.body.appendChild(parent2);

}

這段代碼很簡單,主要是綁定button事件,事件內容是複製了一個parent,修改其id,然後添加到文檔中。這裡有幾點要注意:

(1)和 createElement一樣, cloneNode創建的節點只是游離有 html文檔外的節點,要調用 appendChild方法才能添加到文檔樹中(2)如果複製的元素有 id,則其副本同樣會包含該 id,由於 id具有唯一性,所以在複製節點後必須要修改其id(3)調用接收的bool參數最好傳入,如果不傳入該參數,不同瀏覽器對其默認值的處理可能不同

除此之外,我們還有一個需要注意的點:如果被複製的節點綁定了事件,則副本也會跟著綁定該事件嗎?這裡要分情況討論:(1)如果是通過 addEventListener或者比如 onclick進行綁定事件,則副本節點不會綁定該事件(2)如果是內聯方式綁定比如:

<div onclick="showParent()"></div>

這樣的話,副本節點同樣會觸發事件。

createDocumentFragment

createDocumentFragment方法用來創建一個DocumentFragment。在前面我們說到DocumentFragment表示一種輕量級的文檔,它的作用主要是存儲臨時的節點用來準備添加到文檔中。createDocumentFragment方法主要是用於添加大量節點到文檔中時會使用到。假設要循環一組數據,然後創建多個節點添加到文檔中,比如示例:

<ul id="list"></ul>

<input type="button" value="添加多項" id="btnAdd" />

document.getElementById("btnAdd").onclick = function(){

   var list = document.getElementById("list");

   for(var i = 0;i < 100; i++){

       var li = document.createElement("li");

       li.textContent = i;

       list.appendChild(li);

   }

}

這段代碼將按鈕綁定了一個事件,這個事件創建了100個li節點,然後依次將其添加HTML文檔中。這樣做有一個缺點:每次一創建一個新的元素,然後添加到文檔樹中,這個過程會造成瀏覽器的回流。所謂回流簡單說就是指元素大小和位置會被重新計算,如果添加的元素太多,會造成性能問題。這個時候,就是使用createDocumentFragment了。DocumentFragment不是文檔樹的一部分,它是保存在內存中的,所以不會造成回流問題。我們修改上面的代碼如下:

document.getElementById("btnAdd").onclick = function(){

   var list = document.getElementById("list");    

   var fragment = document.createDocumentFragment();

   for(var i = 0;i < 100; i++){

     var li = document.createElement("li");

       li.textContent = i;

       fragment.appendChild(li);

   }

   list.appendChild(fragment);

}

優化後的代碼主要是創建了一個fragment,每次生成的li節點先添加到fragment,最後一次性添加到list。

創建型API總結

創建型api主要包括createElement,createTextNode,cloneNode和createDocumentFragment四個方法,需要注意下面幾點:(1)它們創建的節點只是一個孤立的節點,要通過appendChild添加到文檔中(2)cloneNode要注意如果被複製的節點是否包含子節點以及事件綁定等問題(3)使用createDocumentFragment來解決添加大量節點時的性能問題

頁面修改型API

前面我們提到創建型api,它們只是創建節點,並沒有真正修改到頁面內容,而是要調用appendChild來將其添加到文檔樹中。我在這裡將這類會修改到頁面內容歸為一類。修改頁面內容的api主要包括:appendChild,insertBefore,removeChild,replaceChild。

appendChild

appendChild我們在前面已經用到多次,就是將指定的節點添加到調用該方法的節點的子元素的末尾。調用方法如下:

parent.appendChild(child);

child節點將會作為parent節點的最後一個子節點。appendChild這個方法很簡單,但是還有有一點需要注意:如果被添加的節點是一個頁面中存在的節點,則執行後這個節點將會添加到指定位置,其原本所在的位置將移除該節點,也就是說不會同時存在兩個該節點在頁面上,相當於把這個節點移動到另一個地方。我們來看例子:

<div id="child">

   要被添加的節點

</div>

<br/>

<br/>

<br/>

<div id="parent">

   要移動的位置

</div>        

<input id="btnMove" type="button" value="移動節點" />

document.getElementById("btnMove").onclick = function(){

   var child = document.getElementById("child");

   document.getElementById("parent").appendChild(child);

}

這段代碼主要是獲取頁面上的child節點,然後添加到指定位置,可以看到原本的child節點被移動到parent中了。這裡還有一個要注意的點:如果child綁定了事件,被移動時,它依然綁定著該事件。

insertBefore

insertBefore用來添加一個節點到一個參照節點之前,用法如下:

parentNode.insertBefore(newNode,refNode);

parentNode表示新節點被添加後的父節點newNode表示要添加的節點refNode表示參照節點,新節點會添加到這個節點之前我們來看這個例子:

<div id="parent">

   父節點

   <div id="child">                

       子元素

   </div>

</div>

<input type="button" id="insertNode" value="插入節點" />

var parent = document.getElementById("parent");

var child = document.getElementById("child");

document.getElementById("insertNode").onclick = function(){

   var newNode = document.createElement("div");

   newNode.textContent = "新節點"

   parent.insertBefore(newNode,child);

}

這段代碼創建了一個新節點,然後添加到child節點之前。和appendChild一樣,如果插入的節點是頁面上的節點,則會移動該節點到指定位置,並且保留其綁定的事件。

關於第二個參數參照節點還有幾個注意的地方:

(1)refNode是必傳的,如果不傳該參數會報錯(2)如果refNode是undefined或null,則insertBefore會將節點添加到子元素的末尾

removeChild

removeChild顧名思義,就是刪除指定的子節點並返回,用法如下:

var deletedChild = parent.removeChild(node);

deletedChild指向被刪除節點的引用,它等於node,被刪除的節點仍然存在於內存中,可以對其進行下一步操作。注意:如果被刪除的節點不是其子節點,則程序將會報錯。我們可以通過下面的方式來確保可以刪除:

if(node.parentNode){

   node.parentNode.removeChild(node);

}

通過節點自己獲取節點的父節點,然後將自身刪除。

replaceChild

replaceChild用於使用一個節點替換另一個節點,用法如下:

parent.replaceChild(newChild,oldChild);

newChild是替換的節點,可以是新的節點,也可以是頁面上的節點,如果是頁面上的節點,則其將被轉移到新的位置oldChild是被替換的節點

頁面修改型API總結

頁面修改型api主要是這四個接口,要注意幾個特點:(1)不管是新增還是替換節點,如果新增或替換的節點是原本存在頁面上的,則其原來位置的節點將被移除,也就是說同一個節點不能存在於頁面的多個位置(2)節點本身綁定的事件會不會消失,會一直保留著。

節點查詢型API

節點查詢型API也是非常常用的api,下面我們分別說明一下每一個api的使用。

document.getElementById

這個接口很簡單,根據元素id返回元素,返回值是Element類型,如果不存在該元素,則返回null。使用這個接口有幾點要注意:(1)元素的Id是大小寫敏感的,一定要寫對元素的id(2)HTML文檔中可能存在多個id相同的元素,則返回第一個元素(3)只從文檔中進行搜索元素,如果創建了一個元素並指定id,但並沒有添加到文檔中,則這個元素是不會被查找到的

document.getElementsByTagName

這個接口根據元素標籤名獲取元素,返回一個即時的HTMLCollection類型,什麼是即時的HTMLCollection類型呢?我們來看看這個示例:

<div>div1</div>

<div>div2</div>

<input type="button" value="顯示數量" id="btnShowCount"/>

<input type="button" value="新增div" id="btnAddDiv"/>    

var divList = document.getElementsByTagName("div");

document.getElementById("btnAddDiv").onclick = function(){

   var div = document.createElement("div");

   div.textContent ="div" + (divList.length+1);

   document.body.appendChild(div);

}

document.getElementById("btnShowCount").onclick = function(){

       alert(divList.length);

}

這段代碼中有兩個按鈕,一個按鈕是顯示HTMLCollection元素的個數,另一個按鈕可以新增一個div標籤到文檔中。前面提到HTMLCollcetion元素是即時的表示該集合是隨時變化的,也就是是文檔中有幾個div,它會隨時進行變化,當我們新增一個div後,再訪問HTMLCollection時,就會包含這個新增的div。

使用document.getElementsByTagName這個方法有幾點要注意:

(1)如果要對HTMLCollection集合進行循環操作,最好將其長度緩存起來,因為每次循環都會去計算長度,暫時緩存起來可以提高效率(2)如果沒有存在指定的標籤,該接口返回的不是null,而是一個空的HTMLCollection(3)「*」表示所有標籤

document.getElementsByName

getElementsByName主要是通過指定的name屬性來獲取元素,它返回一個即時的NodeList對象。使用這個接口主要要注意幾點:

(1)返回對象是一個即時的NodeList,它是隨時變化的(2)在HTML元素中,並不是所有元素都有name屬性,比如div是沒有name屬性的,但是如果強制設置div的name屬性,它也是可以被查找到的(3)在IE中,如果id設置成某個值,然後傳入getElementsByName的參數值和id值一樣,則這個元素是會被找到的,所以最好不好設置同樣的值給id和name

document.getElementsByClassName

這個API是根據元素的class返回一個即時的HTMLCollection,用法如下:

var elements = document.getElementsByClassName(names);

這個接口有下面幾點要注意:

(1)返回結果是一個即時的HTMLCollection,會隨時根據文檔結構變化(2)IE9以下瀏覽器不支持(3)如果要獲取2個以上classname,可傳入多個classname,每個用空格相隔,例如:

var elements = document.getElementsByClassName("test1 test2");

document.querySelector和document.querySelectorAll

這兩個api很相似,通過css選擇器來查找元素,注意選擇器要符合CSS選擇器的規則。首先來介紹一下document.querySelector。document.querySelector返回第一個匹配的元素,如果沒有匹配的元素,則返回null。注意,由於返回的是第一個匹配的元素,這個api使用的深度優先搜索來獲取元素。我們來看這個例子:

<div>

   <div>

       <span class="test">第三級的span</span>    

   </div>

</div>

<div class="test">            

   同級的第二個div

</div>

<input type="button" id="btnGet" value="獲取test元素" />

document.getElementById("btnGet").addEventListener("click",function(){

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

   alert(element.textContent);

})

這個例子很簡單,就是兩個class都包含「test」的元素,一個在文檔樹的前面,但是它在第三級,另一個在文檔樹的後面,但它在第一級,通過querySelector獲取元素時,它通過深度優先搜索,拿到文檔樹前面的第三級的元素。

document.querySelectorAll的不同之處在於它返回的是所有匹配的元素,而且可以匹配多個選擇符,我們來看看下面這個例子:

<div class="test">

   class為test

</div>

<div id="test">

   id為test

</div>

<input id="btnShow" type="button" value="顯示內容" />

document.getElementById("btnShow").addEventListener("click",function(){

   var elements = document.querySelectorAll("#test,.test");    

   for(var i = 0,length = elements.length;i<length;i++){

       alert(elements[i].textContent);

   }    

})

這段代碼通過querySelectorAll,使用id選擇器和class選擇器選擇了兩個元素,並依次輸出其內容。要注意兩點:

(1)querySelectorAll也是通過深度優先搜索,搜索的元素順序和選擇器的順序無關(2)返回的是一個非即時的NodeList,也就是說結果不會隨著文檔樹的變化而變化兼容性問題:querySelector和querySelectorAll在ie8以下的瀏覽器不支持。

節點關係型api

在html文檔中的每個節點之間的關係都可以看成是家譜關係,包含父子關係,兄弟關係等等,下面我們依次來看看每一種關係。

父關係型api

parentNode:每個節點都有一個parentNode屬性,它表示元素的父節點。Element的父節點可能是Element,Document或DocumentFragment。

parentElement:返回元素的父元素節點,與parentNode的區別在於,其父節點必須是一個Element,如果不是,則返回null

兄弟關係型api

previousSibling:節點的前一個節點,如果該節點是第一個節點,則為null。注意有可能拿到的節點是文本節點或注釋節點,與預期的不符,要進行處理一下。

previousElementSibling:返回前一個元素節點,前一個節點必須是Element,注意IE9以下瀏覽器不支持。

nextSibling:節點的後一個節點,如果該節點是最後一個節點,則為null。注意有可能拿到的節點是文本節點,與預期的不符,要進行處理一下。

nextElementSibling:返回後一個元素節點,後一個節點必須是Element,注意IE9以下瀏覽器不支持。

子關係型api

childNodes:返回一個即時的NodeList,表示元素的子節點列表,子節點可能會包含文本節點,注釋節點等。children:一個即時的HTMLCollection,子節點都是Element,IE9以下瀏覽器不支持。firstChild:第一個子節點。lastChild:最後一個子節點。hasChildNodes方法:可以用來判斷是否包含子節點。

元素屬性型apisetAttribute

setAttribute:根據名稱和值修改元素的特性,用法如下:

element.setAttribute(name, value);

其中name是特性名,value是特性值。如果元素不包含該特性,則會創建該特性並賦值。如果元素本身包含指定的特性名為屬性,則可以世界訪問屬性進行賦值,比如下面兩條代碼是等價的:

element.setAttribute("id","test");

element.id = "test";

getAttribute

getAttribute返回指定的特性名相應的特性值,如果不存在,則返回null或空字符串。用法如下:

var value = element.getAttribute("id");

元素樣式型api直接修改元素的樣式

elem.style.color = 'red';

elem.style.setProperty('font-size', '16px');

elem.style.removeProperty('color');

動態添加樣式規則

var style = document.createElement('style');

style.innerHTML = 'body{color:red} #top:hover{background-color: red;color: white;}';

document.head.appendChild(style);

window.getComputedStyle

通過element.sytle.xxx只能獲取到內聯樣式,藉助window.getComputedStyle可以獲取應用到元素上的所有樣式,IE8或更低版本不支持此方法。

var style = window.getComputedStyle(element[, pseudoElt]);

element是要獲取的元素,pseudoElt指定一個偽元素進行匹配。返回的style是一個CSSStyleDeclaration對象。通過style可以訪問到元素計算後的樣式

getBoundingClientRect

getBoundingClientRect用來返回元素的大小以及相對於瀏覽器可視窗口的位置,兼容性非常好(IE6+),用法如下:

var clientRect = element.getBoundingClientRect();

clientRect是一個DOMRect對象,包含left,top,right,bottom,它是相對於可視窗口的距離,滾動位置發生改變時,它們的值是會發生變化的。除了IE9以下瀏覽器,還包含元素的height和width等數據,具體可查看連結。

參考

轉載地址:http://luopq.com/2015/11/30/javascript-dom/參考地址:http://blog.liuxianan.com/javascript-dom-api.html#fu-guan-xi-API

相關焦點

  • 【打樁系列】Javascript操作DOM常用API總結
    操作DOM的一些常用的api,根據其作用整理成為創建,修改,查詢等多種類型的api,主要用於複習基礎知識,加深對原生js的認識。基本概念在講解操作DOM的api之前,首先我們來複習一下一些基本概念,這些概念是掌握api的關鍵,必須理解它們。Node類型DOM1級定義了一個Node接口,該接口由DOM中所有節點類型實現。這個Node接口在JS中是作為Node類型實現的。在IE9以下版本無法訪問到這個類型,JS中所有節點都繼承自Node類型,都共享著相同的基本屬性和方法。
  • 原生JavaScript的DOM操作匯總
    今天總結一下常見的JavaScript DOM操作方法。程式設計師經常講在IDE中寫C#、Java會越來越手殘,那麼經常用jQuery也會讓我們忘記JavaScript是如何作用於DOM的。 JavaScript的DOM操作也是面試中的常見問題,尤其是當你需要回答jQuery的性能問題時,便需要再次回到JavaScript DOM API。
  • 幾個非常有意思的javascript知識點總結
    Resize Observer主要用來監聽元素大小的變化,相比於每次窗口變動都觸發的window.resize事件, Resize Observer有更好的性能和對dom有更細粒度的控制,它只會在繪製前或布局後觸發調用. 以上兩個api的使用和Intersection使用非常類似,官方資料也寫得很全,大家可以好好研究一下.2.
  • JavaScript 的 API 設計原則
    系滷煮自己總結的一些經驗教訓。同時也參考了一些文章,地址會在後面貼出來。很難做到詳盡充實,如果有好的建議或者不對的地方,還望不吝賜教斧正。一、接口的流暢性好的接口是流暢易懂的,他主要體現如下幾個方面:1.簡單操作某個元素的css屬性,下面是原生的方法:document.querySelectorAll('#id').style.color = 'red';封裝之後function
  • JavaScript 數組操作函數總結
    js中數組操作函數還是非常多的,今天忽然想到來總結一下,也算是溫故而知新吧。
  • 爬蟲基本功之學點JS-DOM操作(一)
    前面我總結了我最近學習js基礎部分,當時提到過js分了三大部分,第一部分ECMA基礎也就是第一次寫的基礎部分,爬蟲基本功之學點JS(一), 第二部分也就是DOM部分,也就是這裡要寫的內容的,然後第三部分BOM部分,後面抽時間再寫。
  • 記錄一次BAT一線網際網路公司前端JavaScript面試
    操作,操作網頁上的Dom元素,瀏覽器上的文本,圖片Bom操作,操作瀏覽器上的一些事情,瀏覽器的導航,地址等事件綁定,ajax,存儲DOM,Document Object ModelDOM是哪種數據結構DOM操作的常用APIattr和property的區別DOM的本質,節點操作,結構操作,DOM性能
  • 使用Intersection Observer API實現視頻隊列自動播放
    前言筆者利用空餘時間研究了一下javascript的Intersection Observer
  • 網頁性能之html css javascript
    前言html css javascript可以算是前端必須掌握的東西了,但是我們的瀏覽器是怎樣解析這些東西的呢 我們如何處理html css javascript這些東西來讓我們的網頁更加合理,在我這裡做了一些實驗,總結起來給大家看看。
  • 幾個常用的 Git 高級命令
    本人根據自己的經驗,整理出幾個較為高級而常用的命令。推薦資料 Git Book。https://git-scm.com/book/en/v2Git blameGit blame 可以查詢每一行代碼的 commit ID、提交者和提交日期。
  • Python 操作 Excel 庫 xlwings 常用操作詳解!
    在之前的文章中我們曾詳細的講解了如何使用openpyxl 操作Excel,其實在Python中還有其他可以直接操作 Excel 文件的庫,如 xlwings、xlrd、xlwt 等等,本文就將講解另一個優秀的庫xlwings開頭還是想說一下,各個庫之間沒有明確的好壞之分,每個庫都有其適合的應用場景,並且xlwings 和 openpyxl 許多區別決定了它們的能力是互為補充:xlwings
  • javascript之常用數據類型及判斷方法
    ,今天,我們來具體重新了解下javascript中的常見數據類型以及他們的判斷方法。3.特殊數據類型:包括null(空對象數據);underfined:未定義的任何數據類型注意:未定義的值和定義未賦值的數據均表示為undefined,null是一種特殊的object對象,NaN是一種特殊的num,常用來判斷數據返回是否為數字
  • Vue.extend API(源碼級詳解)
    源碼分析你可以在源碼目錄src/core/global-api/extend.js下找到這個函數的定義export function initExtend(Vue: GlobalAPI) { // 這個cid是一個全局唯一的遞增的id // 緩存的時候會用到它 Vue.cid = 0 let cid = 1 /
  • JavaScript 各種遍歷方式詳解,有你不知道的黑科技
    突然靈光一動,在《javascript高級編程》中找到了答案,大概意思就是javascript的內部屬性中,將對象數據屬性中的Enumerable設置為了false// 查看length的內部屬性console.log(Object.getOwnPropertyDescriptor(this, 'length'));// Object {value: 4, writable: false
  • javascript基礎教程八js中獲取 DOM 的方法
    一、js中獲取 DOM 的方法document.getElementById() 根據 id 獲取 dom 元素對象參數:元素id返回值:根據元素document.getElementById('parent');console.log(parent);2. context.getElementsByTagName()參數:標籤名返回值:從 context 下獲取的指定標籤名的 dom
  • 手把手教你學Numpy——常用API合集
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】,經微信公眾號授權轉載,如需轉載與原文作者聯繫今天是Numpy專題的第5篇文章,我們來繼續學習Numpy當中一些常用的數學和統計函數。
  • JavaScript DOM 編程
    節點的層次- DOM 把一個文檔表示為一顆家譜樹(父,子,兄弟)- DOM 定義了 Node 接口以及許多種節點類型來表示 XML 節點的多個方面1、節點及其類型節點:來源於網絡理論,代表網絡中一個連接點,網絡是由節點構成的集合①,元素節點②,屬性節點:元素的屬性,可以直接通過屬性的方式來操作
  • HTML DOM對象常用的方法
    第六節 HTML DOM對象常用的方法大家好,我們開始HTML DOM常見對象的方法的講解,所謂的方法就是對象自身的動作。HTML DOM 方法就是我們可以在節點(HTML 元素)上執行的動作,比如添加或修改元素。
  • JavaScript 基礎:「47」JavaScript 語言中 parseInt 函數用法詳解
    JavaScript 語言中 parseInt 函數用法詳解。我們在日常編程過程中,經常會遇到不同數據類型轉換的問題。用得比較多的是字符串轉換為整型,還有一些常用的不同進位轉換。如果要實現數字之間不同類型轉換及進位轉換,我們在 JavaScript 語言中可以通過 parseInt 函數實現。
  • 學習筆記:DOM的元素操作
    知識總結:姬清,魯雷,撒世蘭 最近學習DOM的操作,DOM主要用來改變網頁的內容,結構和樣式。所以在整個web前端裡面是非常重要的內容,今天給大家整理了DOM獲取元素&操作元素的樣式屬性內容,供大家參考: 知識目錄: 1.DOM的定義 2.DOM的作用 3.DOM樹 4.獲取元素