Javascript-DOM

一稚疹、node類型

nodeType屬性:表明節(jié)點(diǎn)的類型
nodeName
nodeValue

2秫筏、節(jié)點(diǎn)關(guān)系

childNode
parentNode
previousSibling
nextSibling
firstChild
lastChild
hasChildNodes():這個方法在節(jié)點(diǎn)包含一或多個子節(jié)點(diǎn)的情況下返回true
DOM節(jié)點(diǎn)之間的關(guān)系如下圖所示:

DOM節(jié)點(diǎn)關(guān)系.PNG

3广鳍、操作節(jié)點(diǎn)

appendChild(node):用于向childNodes 列表的末尾添加一個節(jié)點(diǎn)。返回值是插入的節(jié)點(diǎn)。

var obody = document.body;
var oP = document.getElementById("p");
var node = document.createElement("strong"); //創(chuàng)建一個元素節(jié)點(diǎn)
var textNode = document.createTextNode("I am strong");//創(chuàng)建一個文本節(jié)點(diǎn)
node.appendChild(textNode); // 文本節(jié)點(diǎn)掛載到元素節(jié)點(diǎn)strong上
var returnedNode = obody.appendChild(node);  //strong 掛載到body節(jié)點(diǎn)上
console.log(returnedNode == node); //true
console.log(obody.lastChild == node);   //true

注意:如果傳入到appendChild()中的節(jié)點(diǎn)已經(jīng)是文檔的一部分了赢赊,那結(jié)果就是將該節(jié)點(diǎn)從原來的位置轉(zhuǎn)移到新位置。即使可以將DOM樹看成是由一系列指針連接起來的聂示,但任何DOM節(jié)點(diǎn)也不能同時(shí)出現(xiàn)在文檔中的多個位置上域携。
insertBefore(newChild, refChild)
這個方法接受兩個參數(shù):要插入的節(jié)點(diǎn)和作為參照的節(jié)點(diǎn)。插入節(jié)點(diǎn)后鱼喉,被插入的節(jié)點(diǎn)會變成參照節(jié)點(diǎn)的前一個同胞節(jié)點(diǎn)(previousSibling)秀鞭,同時(shí)被方法返回。

replaceChild(newChild, oldChild)
接受的兩個參數(shù)是:要插入的節(jié)點(diǎn)和要替換的節(jié)點(diǎn)扛禽。要替換的節(jié)點(diǎn)將由這個方法返回并從文檔樹中被移除锋边,同時(shí)由要插入的節(jié)點(diǎn)占據(jù)其位置。
removeChild()
與使用replaceChild()方法一樣编曼,通過removeChild()移除的節(jié)點(diǎn)仍然為文檔所有豆巨,只不過在文檔中已經(jīng)沒有了自己的位置。

4掐场、其他方法

cloneNode(boolean)
用于創(chuàng)建調(diào)用這個方法的節(jié)點(diǎn)的一個完全相同的副本往扔。
注意:cloneNode()方法不會復(fù)制添加到DOM 節(jié)點(diǎn)中的JavaScript 屬性,例如事件處理程序等熊户。這個方法只復(fù)制特性萍膛、(在明確指定的情況下也復(fù)制)子節(jié)點(diǎn),其他一切都不會復(fù)制嚷堡。IE 在此存在一個bug蝗罗,即它會復(fù)制事件處理程序,所以我們建議在復(fù)制之前最好先移除事件處理程序蝌戒。
normalize()
這個方法唯一的作用就是處理文檔樹中的文本節(jié)點(diǎn)串塑。

二、Document類型

JavaScript 通過Document 類型表示文檔北苟。在瀏覽器中桩匪,document 對象是HTMLDocument(繼承自Document 類型)的一個實(shí)例,表示整個HTML 頁面友鼻。而且吸祟,document 對象是window 對象的一個屬性瑟慈,因此可以將其作為全局對象來訪問。Document 節(jié)點(diǎn)具有下列特征:

nodeType 的值為9屋匕;
nodeName 的值為"#document"葛碧;
nodeValue 的值為null;
parentNode 的值為null过吻;
ownerDocument 的值為 null进泼;
其子節(jié)點(diǎn)可能是一個DocumentType(最多一個)、Element(最多一個)纤虽、ProcessingInstruction或Comment乳绕。

1、文檔的子節(jié)點(diǎn)

documentElement屬性
該屬性始終指向HTML 頁面中的<html>元素
documentBody屬性
指向body元素
document.doctype

var doctype = document.doctype; //取得對<!DOCTYPE>的引用

2逼纸、文檔信息

document.title
document.URL
document.domain 可以設(shè)置
document.referrer 獲取來源頁面的URL
由于跨域安全限制洋措, 來自不同子域的頁面無法通過JavaScript 通信。而通過將每個頁面的document.domain 設(shè)置為相同的值杰刽,這些頁面就可以互相訪問對方包含的JavaScript 對象了

3菠发、查找元素

document.getElementById
document.getElementsByTagName
getElementsByName()

4、特殊集合

document.anchors贺嫂,包含文檔中所有帶name 特性的<a>元素滓鸠;
document.applets,包含文檔中所有的<applet>元素第喳,因?yàn)椴辉偻扑]使用<applet>元素糜俗,所以這個集合已經(jīng)不建議使用了
document.forms,包含文檔中所有的<form>元素
document.images曲饱,包含文檔中所有的<img>元素
document.links悠抹,包含文檔中所有帶href 特性的<a>元素。

5扩淀、DOM一致性檢測

document.implementation.hasFeature(feature, version)

6楔敌、文檔寫入

document.write()
document.writeIn()
document.open()
document.close()

三、Element類型

Element 類型用于表現(xiàn)XML或HTML元素引矩,提供了對元素標(biāo)簽名、子節(jié)點(diǎn)及特性的訪問侵浸。

  • nodeType 的值為1旺韭;
  • nodeName 的值為元素的標(biāo)簽名;
  • nodeValue 的值為null掏觉;
  • parentNode 可能是Document 或Element区端;
  • 其子節(jié)點(diǎn)可能是Element、Text澳腹、Comment织盼、ProcessingInstruction杨何、CDATASection 或EntityReference。
    nodeName tagName 訪問元素的標(biāo)簽名
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <div id="myDiv"></div>
        <script>
        var div = document.getElementById("myDiv");
        console.log(div.tagName); //"DIV"
        console.log(div.tagName === div.nodeName); //true
        </script>
    </body>
</html>

這里的元素標(biāo)簽名是div沥邻,它擁有一個值為"myDiv"的ID危虱。可是唐全,div.tagName 實(shí)際上輸出的是"DIV"而非"div"埃跷。在HTML 中,標(biāo)簽名始終都以全部大寫表示邮利;而在XML(有時(shí)候也包括XHTML)中弥雹,標(biāo)簽名則始終會與源代碼中的保持一致。假如你不確定自己的腳本將會在HTML 還是XML 文檔中執(zhí)行延届,最好是在比較之前將標(biāo)簽名轉(zhuǎn)換為相同的大小寫形式

1剪勿、HTML元素

id,元素在文檔中的唯一標(biāo)識符方庭。
title厕吉,有關(guān)元素的附加說明信息,一般通過工具提示條顯示出來二鳄。
lang赴涵,元素內(nèi)容的語言代碼,很少使用订讼。
dir髓窜,語言的方向,值為"ltr"(left-to-right欺殿,從左至右)或"rtl"(right-to-left寄纵,從右至左),也很少使用脖苏。
className程拭,與元素的class 特性對應(yīng),即為元素指定的CSS類棍潘。沒有將這個屬性命名為class恃鞋,是因?yàn)閏lass 是ECMAScript 的保留字

var div = document.getElementById("myDiv");
console.log(div.id);
console.log(div.className);
console.log(div.title);
console.log(div.lang);
console.log(div.dir);

2、獲取特性

getAttribute()
注意:有兩類特殊的特性亦歉,它們雖然有對應(yīng)的屬性名恤浪,但屬性的值與通過getAttribute()返回的值并不相同
第一類:style屬性

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <div id="myDiv" class="bd" title="Body text" lang="en" dir="ltr"
            style="padding:10px;" 
        ></div>
        <script>
        var div = document.getElementById("myDiv");
        console.log(div.style == div.getAttribute("style")); //false
        </script>
    </body>
</html>

3、設(shè)置特性
setAttribute()
這個方法接受兩個參數(shù):要設(shè)置的特性名和值肴楷。如果特性已經(jīng)存在水由,setAttribute()會以指定的值替換現(xiàn)有的值;如果特性不存在赛蔫,setAttribute()則創(chuàng)建該屬性并設(shè)置相應(yīng)的值砂客。
注意:這里我們要區(qū)分[特性]和][屬性]的概念泥张。

  • 特性:比如class、id……
  • 屬性:包括特性鞠值,可以自定義屬性媚创。
    當(dāng)我們?yōu)橐粋€元素添加一個屬性時(shí),如果是特性齿诉,則可以直接添加筝野,如果是自定義屬性,必須用setAttribute()
    removeAttribute
    這個方法用于徹底刪除元素的特性粤剧。調(diào)用這個方法不僅會清除特性的值歇竟,而且也會從元素中完全刪除特性

4、attributes屬性

5抵恋、創(chuàng)建元素

document.createElement()

6焕议、元素的子節(jié)點(diǎn)

childNodes

四、Text類型

文本節(jié)點(diǎn)由Text 類型表示弧关,包含的是可以照字面解釋的純文本內(nèi)容盅安。純文本中可以包含轉(zhuǎn)義后的HTML 字符,但不能包含HTML 代碼世囊。Text 節(jié)點(diǎn)具有以下特征:
nodeType 的值為3别瞭;
nodeName 的值為"#text";
nodeValue 的值為節(jié)點(diǎn)所包含的文本株憾;
parentNode 是一個Element蝙寨;
不支持(沒有)子節(jié)點(diǎn)。
nodeValue 屬性或data 屬性: 訪問Text節(jié)點(diǎn)中包含的文本

appendData(text):將text 添加到節(jié)點(diǎn)的末尾嗤瞎。
deleteData(offset, count):從offset 指定的位置開始刪除count 個字符墙歪。
insertData(offset, text):在offset 指定的位置插入text。
replaceData(offset, count, text):用text 替換從offset 指定的位置開始到offset+count 為止處的文本贝奇。
splitText(offset):從offset 指定的位置將當(dāng)前文本節(jié)點(diǎn)分成兩個文本節(jié)點(diǎn)虹菲。
substringData(offset, count):提取從offset 指定的位置開始到offset+count 為止處的字符串。

1掉瞳、創(chuàng)建文本節(jié)點(diǎn)

document.createTextNode(text)

2毕源、規(guī)范化文本節(jié)點(diǎn)

normalize()

var element = document.createElement("div");
element.className = "message";
var textNode = document.createTextNode("hello! Tom");
element.appendChild(textNode);
var anotherTextNode = document.createTextNode("Jerry");
element.appendChild(anotherTextNode);
document.body.appendChild(element);
console.log(element.childNodes.length); //2
element.normalize();
console.log(element.childNodes.length); //1
console.log(element.firstChild.nodeValue);  //hello! TomJerry

3、分割文本節(jié)點(diǎn)

Text 類型提供了一個作用與normalize()相反的方法:splitText()陕习。這個方法會將一個文本節(jié)點(diǎn)分成兩個文本節(jié)點(diǎn)霎褐,即按照指定的位置分割nodeValue 值。原來的文本節(jié)點(diǎn)將包含從開始到指定位置之前的內(nèi)容衡查,新文本節(jié)點(diǎn)將包含剩下的文本瘩欺。這個方法會返回一個新文本節(jié)點(diǎn)必盖,該節(jié)點(diǎn)與原節(jié)點(diǎn)的parentNode 相同拌牲。來看下面的例子俱饿。

var element = document.createElement("div");
element.className = "message";
var textNode = document.createTextNode("hello Tom");
element.appendChild(textNode);
document.body.appendChild(element);
var newNode = element.firstChild.splitText(5);
console.log(element.firstChild.nodeValue);  //hello
console.log(newNode.nodeValue);             // Tom
console.log(element.childNodes.length);     //2

五、Attr類型

attr表示特性類型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塌忽,一起剝皮案震驚了整個濱河市拍埠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌土居,老刑警劉巖枣购,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擦耀,居然都是意外死亡棉圈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門眷蜓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來分瘾,“玉大人,你說我怎么就攤上這事吁系〉抡伲” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵汽纤,是天一觀的道長上岗。 經(jīng)常有香客問我,道長蕴坪,這世上最難降的妖魔是什么肴掷? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辞嗡,結(jié)果婚禮上捆等,老公的妹妹穿的比我還像新娘。我一直安慰自己续室,他們只是感情好栋烤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挺狰,像睡著了一般明郭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丰泊,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天薯定,我揣著相機(jī)與錄音,去河邊找鬼瞳购。 笑死话侄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播年堆,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吞杭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了变丧?” 一聲冷哼從身側(cè)響起芽狗,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痒蓬,沒想到半個月后童擎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攻晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年顾复,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲁捏。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捕透,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碴萧,到底是詐尸還是另有隱情乙嘀,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布破喻,位于F島的核電站虎谢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏曹质。R本人自食惡果不足惜婴噩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羽德。 院中可真熱鬧几莽,春花似錦、人聲如沸宅静。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姨夹。三九已至纤垂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磷账,已是汗流浹背峭沦。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逃糟,地道東北人吼鱼。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓蓬豁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菇肃。 傳聞我的和親對象是個殘疾皇子庆尘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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