學(xué)習(xí)筆記二|腳本化文檔

DOM概覽

文檔對(duì)象模型(DOM)是表示和操作HTML和XML文檔內(nèi)容的基礎(chǔ)API匹厘。

選取文檔元素

  • 用指定的id屬性蹭睡;
  • 用指定的name屬性;
  • 用指定的標(biāo)簽屬性捐韩;
  • 用指定的css類库继;
  • 匹配指定的css選擇器箩艺。

通過ID選取元素

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

通過名字選取元素

var radiobuttons = document.getElementsByName("favorite_color");

getElementsByName()定義在HTMLDocument類中,而不在Document類中宪萄,所以它只針對(duì)HTML文檔可用艺谆,在XML文檔中不可用。它返回一個(gè)NodeList對(duì)象拜英,后者的行為類似一個(gè)包含若干Element對(duì)象的只讀數(shù)組静汤。

//有些元素可以作為Document屬性僅通過名字來選取
//針對(duì)***<form name="shipping_address">***
var form = document.shipping_address;

通過標(biāo)簽名選取元素

var spans = document.getElementsyTagName("span");

該方法返回一個(gè)NodeList對(duì)象。并且不區(qū)分大小寫。
給getElementsyTagName()傳遞通配符參數(shù)將獲得一個(gè)代表文檔中所有元素的NodeList對(duì)象虫给。*

通過CSS類選取元素

var test = document.getElementByClassName("class_1");

通過CSS選擇器選取元素

#nav  //id="nav"的元素
div     //所有<div>元素
.warning   //所有在class屬性值中包含了“warning”的元素
p[lang="fr"]   //所有使用法語的段落藤抡,如:<p lang="fr">
*[name="x"]  //所有包含name="x"屬性的元素
#log>span   //id="log"元素的子元素中的所有<span>元素
body>h1:first-child  //<body>的子元素中的第一個(gè)<h1>元素
div,#log    //所有<div>元素抹估,以及id="log"的元素

document.all[]

document.all[0]     //文檔中第一個(gè)元素
document.all["navbar"] //id或name為"navbar"的元素(或多個(gè)元素)
document.all.navbar  //同上
document.all.tags("div")  //文檔中所有的<div>元素
document.all.tags("p")[0] //文檔中第一個(gè)<p>元素

文檔結(jié)構(gòu)和遍歷

作為節(jié)點(diǎn)樹的文檔

Document對(duì)象缠黍、它的Element對(duì)象和文檔中表示文本的Text對(duì)象都是Node對(duì)象。有以下屬性:

  • parentNode:該節(jié)點(diǎn)的父節(jié)點(diǎn)药蜻,如果沒有父節(jié)點(diǎn)就是null瓷式;
  • childNodes: 只讀的類數(shù)組對(duì)象(NodeList對(duì)象),它是該節(jié)點(diǎn)的子節(jié)點(diǎn)的實(shí)時(shí)表示谷暮;
  • firstChild蒿往、lastChild: 該節(jié)點(diǎn)的子節(jié)點(diǎn)中的第一個(gè)和最后一個(gè),沒有則為null湿弦;
  • nextSibling瓤漏、previousSibling: 該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中的前一個(gè)和后一個(gè)。
  • nodeType: 該節(jié)點(diǎn)的類型颊埃。
  • 9:Document節(jié)點(diǎn)
  • 1: Element節(jié)點(diǎn)
  • 3: Text節(jié)點(diǎn)
  • 8: Comment節(jié)點(diǎn)
  • 11: DocumentFragment節(jié)點(diǎn)
  • nodeValue: Text節(jié)點(diǎn)或Comment節(jié)點(diǎn)的文本內(nèi)容蔬充。
  • nodeName: 元素的標(biāo)簽名,以大寫形式表示班利。

屬性

HTML屬性作為Element屬性

數(shù)據(jù)集屬性

在HTML5文檔中饥漫,任意以“data-”為前綴的小寫的屬性名字都是合法的。
HTML5還在Element對(duì)象上定義了dataset屬性罗标。該屬性指代一個(gè)對(duì)象庸队,它的各個(gè)屬性對(duì)應(yīng)于去掉前綴的data-屬性。因此dataset.x應(yīng)保存data-x屬性的值闯割。

作為Attr節(jié)點(diǎn)的屬性

Node類型定義了attributes屬性彻消。

元素的內(nèi)容

作為HTML的元素內(nèi)容

Paste_Image.png

作為純文本的元素內(nèi)容

var para = document.getElementByTagName("p")[0];   //文檔中第一個(gè)<p>
var text = para.textContent;    //文本是“This is a simple document.”
para.textContent = "Hello";   //修改段落內(nèi)容

創(chuàng)建、插入和刪除節(jié)點(diǎn)

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

var newNode = document.createTextNode("text node content");

每個(gè)節(jié)點(diǎn)有一個(gè)cloneNode()方法來返回該節(jié)點(diǎn)的一個(gè)全新副本宙拉。

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

一旦有一個(gè)新節(jié)點(diǎn)宾尚,就可以用Node的方法appendChild()或insertBefore()將它插入到文檔中。

刪除和替換節(jié)點(diǎn)

  • removeChild()方法是從文檔樹中刪除一個(gè)節(jié)點(diǎn)谢澈。在父節(jié)點(diǎn)上調(diào)用該方法煌贴,并將需要?jiǎng)h除的子節(jié)點(diǎn)作為方法參數(shù)傳遞給它。
//刪除n節(jié)點(diǎn)
n.parentNode.removeChild(n);
  • replaceChild()方法刪除一個(gè)子節(jié)點(diǎn)并用一個(gè)新的節(jié)點(diǎn)取而代之锥忿。父節(jié)點(diǎn)上調(diào)用牛郑,第一個(gè)參數(shù)是新節(jié)點(diǎn),第二個(gè)參數(shù)是需要代替的節(jié)點(diǎn)
//用一個(gè)文本字符串來替換節(jié)點(diǎn)n
n.parentNode.replaceChild(document.createTextNode("[REDACTED]",n);

使用DocumentFragment

DocumentFragment是一種特殊的Node敬鬓,它作為其他節(jié)點(diǎn)的一個(gè)臨時(shí)的容器淹朋。

//創(chuàng)建一個(gè)DocumentFragment
var frag = document.createDocumentFragment();

DocumentFragment是獨(dú)立的灶似。它的parentNode總是為null,但是他可以有任意多的子節(jié)點(diǎn)瑞你,可以用appendChild()和insertBefore()等方法來操作它們。


文檔和元素的幾何形狀和滾動(dòng)

文檔坐標(biāo)和視口坐標(biāo)

為了在坐標(biāo)系之間互相轉(zhuǎn)換希痴,我們需要判定瀏覽器窗口的滾動(dòng)條的位置者甲。window對(duì)象的pageXOffset和pageYOffset屬性在所有的瀏覽器中提供這些值。

查詢窗口的視口尺寸

查詢?cè)氐膸缀纬叽?/h3>
var box = e.getBoundingClientRect();  //獲得在視口坐標(biāo)中的位置
var offsets = getScrollOffsets();  //上面定義的工具函數(shù)
var x = box.left + offsets.x; //轉(zhuǎn)化為文檔坐標(biāo)
var y = box.top + offsets.y;

HTML表單

表單元素1
表單元素2

選取表單和表單元素

//name = "address"屬性的<form>可以用以下任何方法來獲取
document.address  //僅當(dāng)表單有name屬性時(shí)可用
document.forms.address  //顯式訪問有name或id的表單
//如果名為“address”的表單的第一個(gè)元素的name是“street”砌创,可以使用以下任何一種方式來引用該元素
document.forms.address[0]
document.forms.address.street
document.address.street  //當(dāng)有name=“address”虏缸,而不是只有id="address"
document.forms.address.elements.street
//如果要明確的選取一個(gè)表單元素,可以索引表單對(duì)象的elements屬性
document.forms.address.elements[0]
document.forms.address.elements.street

表單和元素的屬性

  • type:標(biāo)識(shí)表單元素類型的只讀的字符串嫩实。
  • form:對(duì)包含元素的Form對(duì)象的只讀引用刽辙。
  • name:只讀的字符串,由HTML屬性name指定甲献。
  • value:可讀/寫的字符串宰缤,指定了表單元素包含或代表的“值”。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晃洒,一起剝皮案震驚了整個(gè)濱河市慨灭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌球及,老刑警劉巖氧骤,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吃引,居然都是意外死亡筹陵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門镊尺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朦佩,“玉大人,你說我怎么就攤上這事鹅心÷来郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵旭愧,是天一觀的道長(zhǎng)颅筋。 經(jīng)常有香客問我,道長(zhǎng)输枯,這世上最難降的妖魔是什么议泵? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮桃熄,結(jié)果婚禮上先口,老公的妹妹穿的比我還像新娘型奥。我一直安慰自己,他們只是感情好碉京,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布厢汹。 她就那樣靜靜地躺著,像睡著了一般谐宙。 火紅的嫁衣襯著肌膚如雪烫葬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天凡蜻,我揣著相機(jī)與錄音搭综,去河邊找鬼。 笑死划栓,一個(gè)胖子當(dāng)著我的面吹牛兑巾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忠荞,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒋歌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了委煤?” 一聲冷哼從身側(cè)響起奋姿,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎素标,沒想到半個(gè)月后称诗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡头遭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寓免,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片计维。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袜香,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鲫惶,到底是詐尸還是另有隱情蜈首,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布欠母,位于F島的核電站欢策,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赏淌。R本人自食惡果不足惜踩寇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望六水。 院中可真熱鬧俺孙,春花似錦辣卒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至场靴,卻和暖如春计露,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憎乙。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叉趣,地道東北人泞边。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疗杉,于是被迫代替她去往敵國(guó)和親阵谚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • DOM概覽 文檔對(duì)象模型是表示和操作HTML和XML文檔內(nèi)容的基礎(chǔ)API烟具。 Document和Element是兩個(gè)...
    亮亮叔家的小筆筆閱讀 923評(píng)論 0 0
  • DOM概覽 上圖的每個(gè)方框是文檔的一個(gè)節(jié)點(diǎn)朝聋,它表示一個(gè)Node對(duì)象荔睹。 選擇文檔元素 獲取文檔的一個(gè)或多個(gè)元素有如下...
    kissLife閱讀 680評(píng)論 0 0
  • 一腊尚、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu))劝篷,知道了CSS樣式(也稱為表示)携龟,會(huì)使用HT...
    凜0_0閱讀 2,770評(píng)論 0 8
  • 將對(duì)象封裝在類似中介的類中坟桅,對(duì)象之間的通信他們本身不用關(guān)心 mediator.h #ifndef _MEDIATO...
    老練子丶2017閱讀 384評(píng)論 0 0
  • 夢(mèng)想蓬戚,陪著我們成長(zhǎng)豫喧,它可以支撐起一卻紧显,給我們動(dòng)力。夢(mèng)想篙程,多么偉大的兩個(gè)字啊郭厌!為了它,人們獻(xiàn)出了汗水扇售,并且努力的奮斗...
    菀馨WanXin閱讀 362評(píng)論 0 1