DOM

DOM

JS的組成

ECMAScript js的基礎語法

DOM 文檔對象模型

BOM 瀏覽器對象模型

DOM

Document Object Model(文檔對象模型)

學習DOM就是學習封裝好的操作頁面的API(應用程序接口)邻储,Application programming interface 就是一些封裝好的方法

DOM:文檔對象模型(Document Object Model)牛柒,又稱為文檔樹模型。是一套操作HTML和XML文檔的API

DOM是由哪些部分組成的吗冤?

首先是由節(jié)點組成的呐馆,節(jié)點又分以下幾部分:

元素 屬性 文本 注釋

1纽谒、獲得頁面元素的方式

  • document.getElementById() 通過標簽的Id獲得的是唯一的頁面標簽對象

var li2 = document.getElementById("li2"); //通過id的方式獲得頁面中的標簽,是唯一的一個對象

  • document.getElementsByTagName() 通過標簽(元素)名

var lis = document.getElementsByTagName("li"); // 通過標簽的方式獲得所有的li元素,是一個標簽對象的數(shù)組

  • document.getElementsByClassName() 通過標簽的類名:在JS中不推薦使用這種方式妄壶,因為有兼容性的問題

var divs = document.getElementsByClassName("box"); // 通過類名的方式獲得的也是標簽對象的數(shù)組

  • H5的獲取元素節(jié)點: document.querySelector("")
  • H5的獲取元素節(jié)點: document.querySelectorAll("")

注意:DOM對象的屬性和標簽的屬性幾乎是一模一樣的,用DOM的方法獲得的標簽對象就是DOM對象

2键耕、獲取元素后的一些操作

獲取元素內的內容

  • textContent

  • innerHTML

區(qū)別:textContent與innerHTML方法類似會返回對象節(jié)點下所有的文本內容寺滚,但是textContent返回的內容只有去HTML化的文本節(jié)點的內容

設置內容

  • textContent

  • innerHTML

innerHTML會直接渲染成對應的HTML標簽

標簽的屬性操作

  • 獲取屬性值(可以獲的自定義屬性的值):dom.getAttribute(name)
  • 設置屬性值(可以獲的自定義屬性的值):dom.setAttribute(name, value)
  • 移除屬性值:dom.removeAttribute(name)
  • 特列:獲取class的值 dom.className , 設置則可以賦值設置,返回的是個字符串
  • 特列:獲取class的值 dom.classList.add() | remove() , 添加或者刪除屈雄,返回的是一個類名數(shù)組

js設置樣式

  • 通過js動態(tài)添加類名從而達到更改樣式

  • 通過dom.style屬性獲取樣式 或者設置樣式

    dom.style.width = "100px"
    dom.style.heigth = "100px"
    dom.style.color = "red"
    dom.style.border = "1px solid red"
    dom.style.backgroundColor = "yellow"
    

3. 節(jié)點

DOM是由節(jié)點組成的 節(jié)點:標簽村视,文本,學習節(jié)點的目的酒奶,是為了讓我們對DOM操作更加的靈活一些蚁孔。

節(jié)點獲取:

  • dom.parentNode: 獲取dom節(jié)點的父節(jié)點
  • dom.children: 獲取dom節(jié)點的子節(jié)點惋嚎,是一個數(shù)組
  • dom.nextElementSibling : 獲取dom的下一個元素節(jié)點
  • dom.nextSibling :獲取dom的下一個節(jié)點(包括元素節(jié)點)
  • dom.previousSibling
  • dom.previousElementSibling 同上

節(jié)點的創(chuàng)建和插入:

  • document.createElement()

    <script>
        var box = document.getElementById("box");
        var ul = document.createElement("ul"); // 創(chuàng)建的是一對標簽
        box.appendChild(ul);// 將創(chuàng)建出來的ul標簽追加到box中
        var  li = document.createElement("li"); // 創(chuàng)建的一個標簽對象
        ul.appendChild(li);
        li.innerHTML = "這是新添加的內容";
    </script>
    
  • cloneNode

  • appendChild

//var li11 = dom.cloneNode(false); // 如果參數(shù)是false的話杠氢,表示淺度克隆,只克隆標簽另伍,不會克隆標簽之間的內容
var li11 = li1.cloneNode(true);// 如果參數(shù)為true的話鼻百,表示 深度克隆,會克隆標簽內的一切內容
// var li11 = li1.cloneNode();// 如果不寫參數(shù)的話质况,與false一致
//  console.log(li11);

// 可以將克隆出來的內容追加到任何一個節(jié)點上
// appendChild
ul.appendChild(li11);  // 在當前父級元素的最后愕宋,追加一個克隆出來的標簽節(jié)點
console.log(ul);
  • m.insertBefore(k,n) 在m元素的k節(jié)點前添加n節(jié)點

刪除節(jié)點

  • m.removeChild(n)刪除m元素中的n節(jié)點

4、事件

JavaScript是一種事件驅動的語言结榄,事件就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間中贝。分為觸發(fā)和響應

  • 觸發(fā):交互的某個瞬間
  • 響應:就是要執(zhí)行的某些代碼要達到一定的效果

事件三要素

事件源 要給誰注冊事件

事件類型 要給事件源注冊什么樣的事件

事件處理程序 要執(zhí)行的代碼,去達到某種效果 函數(shù)或是匿名函數(shù)

注冊事件

  • On的方式注冊事件
  • addEventListener()

移除事件

dom.removeEventListener(type,listener) 高級瀏覽器支持的方式

事件冒泡

事件冒泡: 當一個元素上的事件被觸發(fā)的時候臼朗,比如說鼠標點擊了一個按鈕邻寿,同樣的事件將會在那個元素的所有祖先元素中被觸發(fā)。這一過程被稱為事件冒泡视哑;這個事件從原始元素開始一直冒泡到DOM樹的最上層绣否。

image.png

事件委托

本來要自己做的事,可以委托其它的標簽去做挡毅,這種方式叫做事件委托

比來要給li注冊的事件蒜撮,現(xiàn)在只需要注冊到ul即可,通過事件冒泡的方式跪呈,也可以達到相應的效果段磨。

阻止事件冒泡

取消冒泡和捕獲: stopPropagation() 取消冒泡和捕獲

事件捕獲 剛好和事件委托相反

是從DOM的最外層到目標對象執(zhí)行觸發(fā)

而冒泡是從當前對象往DOM的最頂級元素去執(zhí)行觸發(fā)

image.png

事件的三個階段

image.png

事件對象event

任何事件觸發(fā)的時候,程序都會提供給我們一個事件對象event

存儲著一些與事件相關的信息

也是有兼容生的耗绿,高級瀏覽器是支持的苹支,但是IE8及以下的瀏覽器的是支持的window.event

Var e = event || window.event;

三個坐標

event.clientX/Y 可視區(qū),以瀏覽器可視區(qū)的左上角為基準

event.pageX/Y 以頁面的左上角為基準

event.screenX/Y 以電腦屏幕的左上角為基準

pageX/Y是有兼容性的误阻,

event.pageX/Y = event.clientX/Y+event.scrollTop/Left

DOM事件的Event對象的常見應用:

  • event.preventDefault() : 阻止默認事件
  • event.stopPropagation(): 阻止冒泡
  • event.stopImmediatePropagation(): 除了該事件的冒泡行為被阻止之外(event.stopPropagation方法的作用),該元素綁定的后序相同類型事件的監(jiān)聽函數(shù)的執(zhí)行也將被阻止.
  • event.target: 返回觸發(fā)事件的元素
  • event.currentTarget: 返回綁定事件的元素

DOM 的事件級別

DOM事件級別.png

DOM1也是存在债蜜,只是沒有涉及到事件晴埂,DOM3比DOM2多了鍵盤和鼠標一些事件

DOM的自定義事件:

var  eve = new Event('eventName')
dom.addEventListener('eventName',function(){
})  //注冊事件
dom.dispatchEvent(eve);   // 觸發(fā)事件,
---------------------------------------------------------
這個事件不能添加參數(shù)寻定,想要添加參數(shù)儒洛,得自定義 CustomEvent事件
// 添加一個適當?shù)氖录O(jiān)聽器
obj.addEventListener("cat", function(e) { process(e.detail) })
// 創(chuàng)建并分發(fā)事件
var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}})
obj.dispatchEvent(event)

其他事件類型:

Onmouseover 鼠標移入的事件

Onmouseout 鼠標離開的事件

Onfocus 獲得焦點的事件

Onblur 失去焦點的事件

Ondblclick 鼠標的雙擊事件

移動端的事件

click事件

單擊事件,類似于PC端的click特姐,但在移動端中晶丘,連續(xù)click的觸發(fā)有200ms ~ 300ms的延遲

touch類事件

觸摸事件黍氮,有touchstart touchmove touchend touchcancel 四種之分

touchstart:手指觸摸到屏幕會觸發(fā)

touchmove:當手指在屏幕上移動時唐含,會觸發(fā)

touchend:當手指離開屏幕時,會觸發(fā)

touchcancel:可由系統(tǒng)進行的觸發(fā)沫浆,比如手指觸摸屏幕的時候捷枯,突然alert了一下,或者系統(tǒng)中其他打斷了touch的行為专执,則可以觸發(fā)該事件

tap類事件

觸碰事件淮捆,我目前還不知道它和touch的區(qū)別,一般用于代替click事件本股,有tap longTap singleTap doubleTap四種之分

tap: 手指碰一下屏幕會觸發(fā)

longTap: 手指長按屏幕會觸發(fā)

singleTap: 手指碰一下屏幕會觸發(fā)

doubleTap: 手指雙擊屏幕會觸發(fā)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末攀痊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拄显,更是在濱河造成了極大的恐慌苟径,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躬审,死亡現(xiàn)場離奇詭異棘街,居然都是意外死亡,警方通過查閱死者的電腦和手機承边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門遭殉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人博助,你說我怎么就攤上這事险污。” “怎么了富岳?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵蛔糯,是天一觀的道長。 經(jīng)常有香客問我城瞎,道長渤闷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任脖镀,我火速辦了婚禮飒箭,結果婚禮上狼电,老公的妹妹穿的比我還像新娘。我一直安慰自己弦蹂,他們只是感情好肩碟,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凸椿,像睡著了一般削祈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脑漫,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天髓抑,我揣著相機與錄音,去河邊找鬼优幸。 笑死吨拍,一個胖子當著我的面吹牛,可吹牛的內容都是我干的网杆。 我是一名探鬼主播羹饰,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碳却!你這毒婦竟也來了队秩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤昼浦,失蹤者是張志新(化名)和其女友劉穎馍资,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體座柱,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡迷帜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了色洞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戏锹。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖火诸,靈堂內的尸體忽然破棺而出锦针,到底是詐尸還是另有隱情,我是刑警寧澤置蜀,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布奈搜,位于F島的核電站,受9級特大地震影響盯荤,放射性物質發(fā)生泄漏馋吗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一秋秤、第九天 我趴在偏房一處隱蔽的房頂上張望宏粤。 院中可真熱鬧脚翘,春花似錦、人聲如沸绍哎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崇堰。三九已至沃于,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間海诲,已是汗流浹背繁莹。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饿肺,地道東北人蒋困。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像敬辣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子零院,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353