JS中常見原生DOM操作API

2021-10-05 11:56:23 字數 3425 閱讀 5325

節點查詢api

document.getelementbyid :根據id查詢元素,大小寫敏感,如果有多個結果,只返回第乙個;

document.getelementsbyclassname :根據類名查詢元素,多個類名用空格分隔,返回乙個 htmlcollection 。注意相容性為ie9+(含)。另外,不僅僅是document,其它元素也支援 getelementsbyclassname 方法;

document.getelementsbytagname :根據標籤查詢元素, * 表示查詢所有標籤,返回乙個 htmlcollection 。

document.getelementsbyname :根據元素的name屬性查詢,返回乙個 nodelist 。

document.queryselector :返回單個node,ie8+(含),如果匹配到多個結果,只返回第乙個。

document.queryselectorall :返回乙個 nodelist ,ie8+(含)。

document.forms :獲取當前頁面所有form,返回乙個 htmlcollection ;

節點建立api

createelement

建立元素:

createtextnode

建立文字節點:

var node = document.createtextnode("我是文字節點");

轉殖節點並不會轉殖事件,除非事件是用

這種方式繫結的,用 addeventlistener 和 node.οnclick=***; 方式繫結的都不會複製。

createdocumentfragment

本方法用來建立乙個 documentfragment ,也就是文件碎片,它表示一種輕量級的文件,主要是用來儲存臨時節點,大量操作dom時用它可以大大提公升效能。

假設現有一題目,要求給ul新增10000個li,我們先用最簡單的拼接字串的方式來實現:

最後再試試文件碎片的方法,可以預見的是,這種方式肯定比第二種好很多,但是應該沒有第一種快:

insertbefore

將某個節點插入到另外乙個節點的前面,語法:

parentnode.insertbefore(newnode, refnode);

這個api個人覺得設定的非常不合理,因為插入節點只需要知道newnode和refnode就可以了,parentnode是多餘的,所以jquery封裝的api就比較好:

newnode.insertbefore(refnode); // 如 $("p").insertbefore("#foo");

所以切記不要把這個原生api和jquery的api使用方法搞混了!為了加深理解,這裡寫乙個簡單的例子:

我是父節點

我是舊的子節點

關於第二個引數:

refnode是必傳的,如果不傳該引數會報錯;

如果refnode是undefined或null,則insertbefore會將節點新增到末尾;

removechild

removechild用於刪除指定的子節點並返回子節點,語法:

var deletedchild = parent.removechild(node);

function removenode(node)

replacechild

replacechild用於將乙個節點替換另乙個節點,語法:

parent.replacechild(newchild, oldchild);

節點關係api

dom中的節點相互之間存在著各種各樣的關係,如父子關係,兄弟關係等。

父關係api

parentnode :每個節點都有乙個parentnode屬性,它表示元素的父節點。element的父節點可能是element,document或documentfragment;

parentelement :返回元素的父元素節點,與parentnode的區別在於,其父節點必須是乙個element元素,如果不是,則返回null;

子關係api

children :返回乙個實時的 htmlcollection ,子節點都是element,ie9以下瀏覽器不支援;

childnodes :返回乙個實時的 nodelist ,表示元素的子節點列表,注意子節點可能包含文字節點、注釋節點等;

firstchild :返回第乙個子節點,不存在返回null,與之相對應的還有乙個 firstelementchild ;

lastchild :返回最後乙個子節點,不存在返回null,與之相對應的還有乙個 lastelementchild ;

兄弟關係型api

previoussibling :節點的前乙個節點,如果不存在則返回null。注意有可能拿到的節點是文字節點或注釋節點,與預期的不符,要進行處理一下。

nextsibling :節點的後乙個節點,如果不存在則返回null。注意有可能拿到的節點是文字節點,與預期的不符,要進行處理一下。

previouselementsibling :返回前乙個元素節點,前乙個節點必須是element,注意ie9以下瀏覽器不支援。

nextelementsibling :返回後乙個元素節點,後乙個節點必須是element,注意ie9以下瀏覽器不支援。

元素屬性型api

setattribute

給元素設定屬性:

element.setattribute(name, value);

其中name是特性名,value是特性值。如果元素不包含該特性,則會建立該特性並賦值。

getattribute

getattribute返回指定的特性名相應的特性值,如果不存在,則返回null:

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

樣式相關api

直接修改元素的樣式

elem.style.color = 'red';

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

elem.style.removeproperty('color');

window.getcomputedstyle

通過 element.sytle.*** 只能獲取到內聯樣式,借助 window.getcomputedstyle 可以獲取應用到元素上的所有樣式,ie8或更低版本不支援此方法。

var style = window.getcomputedstyle(element[, pseudoelt]);

getboundingclientrect

getboundingclientrect 用來返回元素的大小以及相對於瀏覽器可視視窗的位置,用法如下:

var clientrect = element.getboundingclientrect();

clientrect是乙個 domrect 物件,包含width、height、left、top、right、bottom,它是相對於視窗頂部而不是文件頂部,滾動頁面時它們的值是會發生變化的。

JS中常見原生DOM操作API

幾種物件 node node是乙個介面,中文叫節點,很多態別的dom元素都是繼承於它,都共享著相同的基本屬性和方法。常見的node有 element,text,attribute,comment,document 等 所以要注意 節點 和 元素 的區別,元素屬於節點的一種 node有乙個屬性 nod...

JS中常見原生DOM操作API 總結整理

node是乙個介面,中文叫節點,很多態別的dom元素都是繼承於它,都共享著相同的基本屬性和方法。常見的node有 element,text,attribute,comment,document 等 所以要注意 節點 和 元素 的區別,元素屬於節點的一種 node有乙個屬性 nodetype 表示no...

原生js中常用的操作DOM的api介面

建立型api總結 建立型api主要包括createelement,createtextnode,clonenode和createdocumentfragment四個方法,需要注意下面幾點 頁面修改型api要注意幾個特點 1 不管是新增還是替換節點,如果新增或替換的節點是原本存在頁面上的,則其原來位置...