DOM 增刪改查

要進行DOM的增刪改查的操作,首先要先搞懂:

什么是dom?

Document Object Model听隐,即文檔對象模型词顾。DOM把一份文檔表示為一棵樹,這是理解DOM模型的關鍵薛闪。是由節(jié)點(node)構成的一棵節(jié)點樹。那么問題又來了:

節(jié)點是什么俺陋?

DOM中有許多不同類型的節(jié)點豁延。其中最重要的有三種:元素節(jié)點(element node),文本節(jié)點(text node)和屬性節(jié)點(attribute node)腊状。有了節(jié)點诱咏,我們就可以很方便地通過定位節(jié)點,快速的對節(jié)點進行增刪改查的操作缴挖。

查:

以下是一些查找節(jié)點的方法:
getElementById()袋狞、getElementsByTagName()getElementsByName()映屋、getElementsByClassName()苟鸯、
querySelector()querySelectorAll()

getElementById():

getElementById()方法秧荆,接受一個參數(shù):獲取元素的ID倔毙。如果找到相應的元素則返回該元素的 HTMLDivElement對象,如果不存在乙濒,則返回null陕赃。id表示一個元素節(jié)點的唯一性,不能同時給兩個或以上的元素節(jié)點創(chuàng)建同一個命名的id颁股。當我們通過getElementById()獲取到特定元素節(jié)點時么库,這個節(jié)點對象就被我們獲取到了,而通過這個節(jié)點對象甘有,我們可以訪問它的一系列屬性诉儒。舉例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<div id="content"name="va" class="n1" style="color:blue">內容</div>
<p id="main" name="va" class="n2">正文</p>
<span id="foot" name="va" class="n1">結尾</span>

  <script>
    var tag = document.getElementsById("content").innerHTML
    console.log(tag)
  </script>
</body>
</html>

最后console.log((id.innerHTML)得到的結果是"內容"

getElementsByTagName():

getElementsByTagName()方法將返回一個對象數(shù)組HTMLCollection(NodeList),這個數(shù)組保存著所有相同元素名的節(jié)點列表亏掀。接上舉例:

  <script>
    var tag = document.getElementsByTagName("p").length
    console.log(tag)
  </script>

最后document.getElementsByTagName("p").length返回了頁面中總共有1個p忱反。

getElementsByName():

getElementsByName()方法可以獲取相同名稱(name)的元素,返回一個對象數(shù)組HTMLCollection(NodeList)滤愕。舉例:

  <script>
    var tag = document.getElementsByName("va")[1].innerHTML
    console.log(tag)
  </script>

最后document.getElementsByName("va")[1].innerHTML返回了第二個name的值為va的元素的innerHTML:"正文"

getElementsByClassName():

getElementsByClassName()方法接受類名參數(shù)返回一個具有相同類名的元素的數(shù)組温算,返回一個對象數(shù)組HTMLCollection(NodeList)。舉例:

  <script>
    var tag = document.getElementsByClassName("n1")[1].innerHTML
    console.log(tag)
  </script>

最后 document.getElementsByClassName("n1")[1].innerHTML返回了第二個class為n1的元素的innerHTML:"結尾"

getAttribute():

getAttribute()方法將獲取元素中某個屬性的值间影。舉例:

<script>
    var tag = document.getElementById("content").getAttribute("name")
    console.log(tag)
 </script>

最后document.getElementById("content").getAttribute("name")獲得了id=content元素的name值:"va"

querySelector():

querySelector()方法返回文檔中匹配指定的選擇器組的第一個元素(使用深度優(yōu)先先序遍歷文檔的節(jié)點 | 并且通過文檔標記中的第一個元素注竿,并按照子節(jié)點數(shù)量的順序迭代順序節(jié)點)。舉例:

<script>
    var tag = document.querySelector(".n1").innerHTML
    console.log(tag)
  </script>

最后document.querySelector(".n1").innerHTML獲得class=n1的第一個元素的innerHTML:"內容"

querySelectorAll():

querySelectorAll()方法返回與指定的選擇器組匹配的文檔中的元素列表 (使用深度優(yōu)先的先序遍歷文檔的節(jié)點)。返回的對象是 NodeList巩割。

  <script>
    var tag = document.querySelectorAll(".n1")[1].innerHTML
    console.log(tag)
  </script>

最后document.querySelectorAll(".n1")[1].innerHTML返回所有符合class=n1的元素中裙顽,第二個元素的innerHTML:"結尾"

改:

修改HTML元素:

修改元素內容:

document.getElementById(id).innerHTML=new value,如修改id為content元素的文本內容宣谈,可以這樣:

   var text = document.getElementById('content').innerHTML="修改內容"
   console.log(text)
  </script>```
于是content的文本內容就會替換成```"修改內容"```
####修改元素屬性:
document.getElementById(id).attribute=new value愈犹,如修改id為content的元素的name值:

<script>
var name = document.getElementById('content').name="new name"
console.log(name)
</script>

content的name值就會替換成```"new name"```

###修改元素CSS:
document.getElementById(id).style.property=new style,如修改id為content的元素的color值:

<script>
var name = document.getElementById('content').style.color="red"
</script>

content的文本內容會變成紅色蒲祈。
####setAttribute()方法:
setAttribute()方法將設置元素中某個屬性和值甘萧。它需要接受兩個參數(shù):屬性名和值。如果屬性本身已存在梆掸,那么就會被覆蓋。

<script>
var content = document.getElementById('content')
content.setAttribute('style','color:red')
</script>

上面例子中id為content的元素文本會被修改成紅色牙言。
##增:
####添加元素節(jié)點
如需向HTML DOM添加新元素酸钦,必須首先創(chuàng)建該元素(元素節(jié)點),然后向一個已存在的元素追加該元素咱枉。

<script>
var div = document.createElement('div')
var node=document.createTextNode("這是新內容卑硫。");
div.appendChild(node)
var content = document.getElementById('content')
content.appendChild(div)
</script>

#####添加元素節(jié)點的方法還有以下這些:
**A.append(B) **: 把B追加到A內部(所有的A元素,以下類似)
**A.appendTo(B)** : 把A追加到B內部
**A.prepend(B)** : 把B追加到A內部的內容前(即B成為A第一個子元素)
**A.prependTo(B)** : 把A追加到B的內容前(即A成為B第一個子元素)
**A.after(B)** : 在A后追加B
**A.before(B)**: 在A前追加B
**node.insertBefore(A,B)**: 在父節(jié)點node里面的B節(jié)點前面追加A
PS:沒有 insertAfter 方法.不過可以使用 insertBefore方法和 nextSibling來模擬它蚕断。
在前一個例子中欢伏,可使用下面代碼將 A插入到 B后面:
**node.insertBefore(A, B.nextSibling)**
####替換節(jié)點:
parent.replaceChild(child,oldElem);

<script>
var p = document.getElementById('main')
var span = document.createElement('span')
span.setAttribute("id", "newSpan")
var span_content = document.createTextNode("新的span元素內容.")
span.appendChild(span_content)
var parentDiv = p.parentNode;
parentDiv.replaceChild(span,p);
</script>

上例中原本的P標簽及里面的內容被替換成```<span id="newSpan">新的span元素內容.</span>```
####添加class:

<script>
var div = document.getElementById('content')
div.className+=" nn"
</script>

最后輸出結果```<div id="content" name="va" class="n1 nn" style="color:blue">內容</div>```

**重要PS: 在這種方法追加class的過程中,要注意被添加的class" nn"前面有一個空格亿乳,否則最后添加成功之后硝拧,原class會變成"n1nn"連成了一個新的class造成錯誤。**
####第二種添加class的方法:

var element = document.getElementById("content");
element.classList.add("nn");

**PS:這種方法class前面不需要添加空格葛假,最后的結果跟上面的方法相同障陶。**
##刪:
####remove():
刪除該元素。

<script>
var div = document.getElementById('content')
div.remove()
</script>

上面例子中id為content的整個元素被刪除了聊训。
####parent.removeChild(child):

<script>
var div = document.getElementById('content')
var p = document.getElementById('p1')
div.removeChild(p);
</script>

上例中父元素content下的子元素P被刪除了抱究。

####child.parentNode.removeChild(child):
在不確定子元素的父元素是哪一個的時候,可以這樣做:

<script>
var p = document.getElementById('p1')
p.parentNode.removeChild(p)
</script>

一樣可以達到上面的移除子元素P的效果带斑,而且不需要考慮獲取其具體的父元素鼓寺。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勋磕,隨后出現(xiàn)的幾起案子妈候,更是在濱河造成了極大的恐慌,老刑警劉巖朋凉,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州丹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機墓毒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門吓揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人所计,你說我怎么就攤上這事柠辞。” “怎么了主胧?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵叭首,是天一觀的道長。 經常有香客問我踪栋,道長焙格,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任夷都,我火速辦了婚禮眷唉,結果婚禮上,老公的妹妹穿的比我還像新娘囤官。我一直安慰自己冬阳,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布党饮。 她就那樣靜靜地躺著肝陪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刑顺。 梳的紋絲不亂的頭發(fā)上氯窍,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音捏检,去河邊找鬼荞驴。 笑死,一個胖子當著我的面吹牛贯城,可吹牛的內容都是我干的熊楼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼能犯,長吁一口氣:“原來是場噩夢啊……” “哼鲫骗!你這毒婦竟也來了?” 一聲冷哼從身側響起踩晶,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤执泰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渡蜻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體术吝,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡计济,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了排苍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦寂。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淘衙,靈堂內的尸體忽然破棺而出传藏,到底是詐尸還是另有隱情,我是刑警寧澤彤守,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布毯侦,位于F島的核電站,受9級特大地震影響具垫,放射性物質發(fā)生泄漏侈离。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一做修、第九天 我趴在偏房一處隱蔽的房頂上張望霍狰。 院中可真熱鬧,春花似錦饰及、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腿短,卻和暖如春屏箍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橘忱。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工赴魁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钝诚。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓颖御,卻偏偏與公主長得像哄陶,于是被迫代替她去往敵國和親舔稀。 傳聞我的和親對象是個殘疾皇子堵泽,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容

  • 節(jié)點的增刪改查 HTML的每個成分都可以看作是節(jié)點(文檔節(jié)點史飞、元素節(jié)點阶祭、文本節(jié)點犀农、屬性節(jié)點寒锚、注釋節(jié)點宠哄,其中垫蛆,屬性節(jié)...
    柳叁叁閱讀 343評論 0 0
  • DOM增刪改查基本操作 基本概念 DOM是JavaScript操作網頁的接口禽最,全稱為“文檔對象模型”(Docume...
    _劉小c閱讀 620評論 0 1
  • Title #electli{ width:100px; height:20px; background:#c4e...
    90后IT閱讀 576評論 0 1
  • 什么是DOM腺怯? 外行看來前端工程師的工作就是改頁面(HTML、CSS)川无,寫腳本(JavaScript)呛占。當你意識到...
    饑人谷_enzo閱讀 219評論 0 0
  • 首先,2019.8.9華為鴻蒙系統(tǒng)的發(fā)布舀透,是中國人的驕傲栓票,值得慶祝。 回顧歷史愕够,PC時代的微軟操作系統(tǒng)走贪,挑戰(zhàn)者都如...
    越讀者_Mlartisan閱讀 837評論 0 1