JavaScript-DOM操作

在之前的文章中判耕,學(xué)習(xí)過(guò)了DOM的訪(fǎng)問(wèn)方式而柑,其中也把DOM相關(guān)的概念進(jìn)行了學(xué)習(xí)苟耻,其實(shí)DOM的內(nèi)容還有很多蛤育,所以本文將會(huì)繼續(xù)學(xué)習(xí)DOM操作相關(guān)的內(nèi)容宛官,DOM操作涉及到的操作有:瓦糕、底洗、,而這方面的內(nèi)容其實(shí)就是上一次所寫(xiě)的“訪(fǎng)問(wèn)方式”咕娄。

DOM的增加

DOM操作中指的是增加節(jié)點(diǎn)枷恕,分為兩部分:創(chuàng)建節(jié)點(diǎn)插入節(jié)點(diǎn)

創(chuàng)建節(jié)點(diǎn)

創(chuàng)建節(jié)點(diǎn)中常用的API方法主要有:

  1. document.createElement():創(chuàng)建指定的HTML元素
  2. document.createTextNode():創(chuàng)建文本節(jié)點(diǎn)
  3. document.createDocumentFrame():創(chuàng)建文檔片段
  4. document.createAttribute():創(chuàng)建節(jié)點(diǎn)屬性
  5. node.cloneNode():克隆節(jié)點(diǎn)

插入節(jié)點(diǎn)###

插入節(jié)點(diǎn)常用的API方法主要有:

  1. node.appendChild():末尾追加一個(gè)新節(jié)點(diǎn)
  2. node.insertBefore():插入一個(gè)新節(jié)點(diǎn)
<div id="div1">
<p id="p1">這是一個(gè)段落</p>
<p id="p2">這是另一個(gè)段落</p>
</div>

<script>
var para=document.createElement("p");
var node=document.createTextNode("這是新段落谭胚。");
para.appendChild(node);

var element=document.getElementById("div1");
element.appendChild(para);
</script>

例子解釋?zhuān)?/strong>

這段代碼創(chuàng)建新的 <p>元素:

 var para=document.createElement("p");

如需向 <p>元素添加文本徐块,您必須首先創(chuàng)建文本節(jié)點(diǎn)。這段代碼創(chuàng)建了一個(gè)文本節(jié)點(diǎn):

var node=document.createTextNode("這是新段落灾而。");

然后您必須向 <p>元素追加這個(gè)文本節(jié)點(diǎn):

para.appendChild(node);

最后您必須向一個(gè)已有的元素追加這個(gè)新元素胡控。
這段代碼找到一個(gè)已有的元素:

var element=document.getElementById("div1");

這段代碼向這個(gè)已有的元素追加新元素:

element.appendChild(para);

關(guān)于document.createAttribute()

document.createAttribute() 方法創(chuàng)建并返回一個(gè)新的屬性節(jié)點(diǎn)。但是這個(gè)方法不是很常用旁趟,如果涉及到創(chuàng)建屬性昼激,一般使用node.setAttribute()

<div id="div1">
<p id="p1">這是一個(gè)段落</p>
<p id="p2">這是另一個(gè)段落</p>
</div>

var node = document.getElementById('div1'); 
var newAttr = document.createAttribute('title');  //創(chuàng)建一個(gè)新的title屬性锡搜;

newAttr .nodeValue = 'Hello world!';  //title屬性的值是:Hello world!
node.setAttributeNode(attr); //運(yùn)用到對(duì)應(yīng)的元素節(jié)點(diǎn)上

關(guān)于node.cloneNode()

node.cloneNode(deep) 方法返回該節(jié)點(diǎn)的一個(gè)副本橙困,deep 可選,表明是否采用深度克隆耕餐,如果為true 凡傅,則該節(jié)點(diǎn)的所有后代節(jié)點(diǎn)也都會(huì)被克隆,否則肠缔,只克隆該節(jié)點(diǎn)本身夏跷。

<div id="div1">
<p id="p1">這是一個(gè)段落</p>
<p id="p2">這是另一個(gè)段落</p>
</div>

var node = document.getElementById('div1');
var cloneNode = node.cloneNode(true); //克隆div1整個(gè)節(jié)點(diǎn);

cloneNode.id = "div2"; //修改克隆的節(jié)點(diǎn)id名稱(chēng)為div2明未;
document.body.appendChild(cloneNode); //在網(wǎng)頁(yè)中追加克隆的節(jié)點(diǎn)槽华;

DOM的刪除

DOM節(jié)點(diǎn)的刪除主要API是node.removeChild();可以使用parentNode.removeChild(child)刪除指定父節(jié)點(diǎn)parentNode的一個(gè)子節(jié)點(diǎn)child,并返回被刪除的節(jié)點(diǎn)趟妥。

注意事項(xiàng):這個(gè)方法是要在被刪除的節(jié)點(diǎn)的父節(jié)點(diǎn)上調(diào)用的猫态,而不是在被刪除節(jié)點(diǎn)上調(diào)用的,如果參數(shù)節(jié)點(diǎn)不是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)披摄,removeChild 方法將報(bào)錯(cuò)亲雪。

<div id="div1">
<p id="p1">這是一個(gè)段落。</p>
<p id="p2">這是另一個(gè)段落行疏。</p>
</div>

<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>

例子解釋?zhuān)?/strong>

這個(gè) HTML 文檔含有擁有兩個(gè)子節(jié)點(diǎn)(兩個(gè)<p>元素)的 <div> 元素:

<div id="div1">
<p id="p1">這是一個(gè)段落匆光。</p>
<p id="p2">這是另一個(gè)段落。</p>
</div>

找到 id="div1"的元素:

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

找到id="p1" 的 <p> 元素:

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

從父元素中刪除子元素:

parent.removeChild(child);

DOM的修改

修改節(jié)點(diǎn)常用的API方法主要有:

  1. appendChild():末尾追加一個(gè)新節(jié)點(diǎn)
  2. insertBefore():插入一個(gè)新節(jié)點(diǎn)
  3. replaceChild():替換節(jié)點(diǎn)

注意事項(xiàng):以上幾個(gè)方法都是操作的某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)酿联,也就是說(shuō)终息,要使用這幾個(gè)方法必須先取得父節(jié)點(diǎn)。另外并不是所有節(jié)點(diǎn)都有子節(jié)點(diǎn)贞让,如果在不支持子節(jié)點(diǎn)的節(jié)點(diǎn)上周崭,調(diào)用了這些方法,將會(huì)導(dǎo)致錯(cuò)誤喳张。

DOM的查找

DOM節(jié)點(diǎn)中的查主要包括:查找元素節(jié)點(diǎn)查找续镇。

查找元素

  1. getElementById() --- 通過(guò)ID訪(fǎng)問(wèn);
  2. getElementsByClassName() --- 通過(guò)類(lèi)名訪(fǎng)問(wèn)销部;
  3. getElementsByTagName() --- 通過(guò)標(biāo)簽名稱(chēng)訪(fǎng)問(wèn)摸航;
  4. querySelector() --- 通過(guò)CSS選擇器訪(fǎng)問(wèn)(單個(gè))制跟;
  5. querySelectorAll() --- 通過(guò)CSS選擇器訪(fǎng)問(wèn) (所有);

關(guān)于這一節(jié)的內(nèi)容酱虎,可以訪(fǎng)問(wèn)上一篇文章:JavaScript-DOM訪(fǎng)問(wèn)方式

節(jié)點(diǎn)查找

所有的節(jié)點(diǎn)都有這些屬性雨膨,都是可以用于訪(fǎng)問(wèn)相關(guān)的node節(jié)點(diǎn):

  1. Node.childNodes: 訪(fǎng)問(wèn)一個(gè)單元素下所有的直接子節(jié)點(diǎn)元素,可以是一個(gè)可循環(huán)的類(lèi)數(shù)組對(duì)象读串。該節(jié)點(diǎn)集合可以保護(hù)不同的類(lèi)型的子節(jié)點(diǎn)(比如text節(jié)點(diǎn)或其他元素節(jié)點(diǎn))聊记。
  2. Node.firstChild: 與childNodes數(shù)組的第一個(gè)項(xiàng)(Element.childNodes[0])是同樣的效果,僅僅是快捷方式恢暖。
  3. Node.lastChild: 與childNodes數(shù)組的最后一個(gè)項(xiàng)(Element.childNodes[Element.childNodes.length-1])是同樣的效果排监,僅僅是快捷方式。
  4. Node.parentNode: 訪(fǎng)問(wèn)當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)杰捂,父節(jié)點(diǎn)只能有一個(gè)舆床,祖節(jié)點(diǎn)可以用Node.parentNode.parentNode 的形式來(lái)訪(fǎng)問(wèn)。
  5. Node.nextSibling: 訪(fǎng)問(wèn)DOM樹(shù)上與當(dāng)前節(jié)點(diǎn)同級(jí)別的下一個(gè)節(jié)點(diǎn)琼娘。
  6. Node.previousSibling: 訪(fǎng)問(wèn)DOM樹(shù)上與當(dāng)前節(jié)點(diǎn)同級(jí)別的上一個(gè)節(jié)點(diǎn)峭弟。

總結(jié)

DOM操作在JavaScript還是很重要的,簡(jiǎn)單點(diǎn)說(shuō)脱拼,所有的交互操作都是基于DOM來(lái)操作的瞒瘸。而DOM中的操作,最為熟悉的就是對(duì)DOM的增熄浓、刪情臭、改、查赌蔑。今天的內(nèi)容也就圍繞著這幾個(gè)方面展開(kāi)學(xué)習(xí)俯在。

參考資料:http://www.w3school.com.cn/htmldom/dom_intro.asp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娃惯,隨后出現(xiàn)的幾起案子跷乐,更是在濱河造成了極大的恐慌,老刑警劉巖趾浅,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愕提,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡皿哨,警方通過(guò)查閱死者的電腦和手機(jī)浅侨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)证膨,“玉大人如输,你說(shuō)我怎么就攤上這事。” “怎么了不见?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵澳化,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我脖祈,道長(zhǎng)肆捕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任盖高,我火速辦了婚禮,結(jié)果婚禮上眼虱,老公的妹妹穿的比我還像新娘喻奥。我一直安慰自己,他們只是感情好捏悬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布撞蚕。 她就那樣靜靜地躺著,像睡著了一般过牙。 火紅的嫁衣襯著肌膚如雪甥厦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天寇钉,我揣著相機(jī)與錄音刀疙,去河邊找鬼。 笑死扫倡,一個(gè)胖子當(dāng)著我的面吹牛谦秧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撵溃,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疚鲤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缘挑?” 一聲冷哼從身側(cè)響起集歇,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎语淘,沒(méi)想到半個(gè)月后诲宇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亏娜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年焕窝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片维贺。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡它掂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虐秋,我是刑警寧澤榕茧,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站客给,受9級(jí)特大地震影響用押,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靶剑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一蜻拨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桩引,春花似錦缎讼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至厘灼,卻和暖如春夹纫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背设凹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工舰讹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人围来。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓跺涤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親监透。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桶错,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • ??DOM(文檔對(duì)象模型)是針對(duì) HTML 和 XML 文檔的一個(gè) API(應(yīng)用程序編程接口)院刁。 ??DOM 描繪...
    霜天曉閱讀 3,644評(píng)論 0 7
  • 節(jié)點(diǎn) 節(jié)點(diǎn)類(lèi)型 每個(gè)節(jié)點(diǎn)都有一個(gè) nodeType 屬性,用于表示節(jié)點(diǎn)類(lèi)型粪狼。nodeType 屬性返回節(jié)點(diǎn)的類(lèi)型退腥。...
    練曉習(xí)閱讀 446評(píng)論 0 4
  • 每天一句:成長(zhǎng)的速度取決于在過(guò)程中發(fā)現(xiàn)和解決問(wèn)題的速度狡刘,最終這是一個(gè)量變引發(fā)質(zhì)變的過(guò)程; DOM(Document...
    EndEvent閱讀 580評(píng)論 0 0
  • 目錄 1. 基本概念 1.1 Node類(lèi)型 DOM1級(jí)定義了一個(gè)Node接口困鸥,該接口由DOM中所有節(jié)點(diǎn)類(lèi)型實(shí)現(xiàn)嗅蔬。這...
    王童孟閱讀 427評(píng)論 0 1
  • 每天一句:成長(zhǎng)的速度取決于在過(guò)程中發(fā)現(xiàn)和解決問(wèn)題的速度澜术,最終這是一個(gè)量變引發(fā)質(zhì)變的過(guò)程艺蝴; DOM(Document...
    王梓懿_1fbc閱讀 148評(píng)論 0 0