通過(guò) HTML DOM,可訪問(wèn) JavaScript HTML 文檔的所有元素。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的寧夏網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
DOM能干啥?
????JavaScript 能夠改變頁(yè)面中的所有 HTML 元素
????JavaScript 能夠改變頁(yè)面中的所有 HTML 屬性
????JavaScript 能夠改變頁(yè)面中的所有 CSS 樣式
????JavaScript 能夠?qū)?yè)面中的所有事件做出反應(yīng)
當(dāng)網(wǎng)頁(yè)被加載時(shí),瀏覽器會(huì)創(chuàng)建頁(yè)面的文檔對(duì)象模型(Document Object Model)。
HTML DOM 模型被構(gòu)造為對(duì)象的樹(shù):
?
查找元素方法:
????1、直接查找:
? ? getElementByid():????通過(guò) id 找到 HTML 元素
????getElementsByTagName():????通過(guò)標(biāo)簽名找到 HTML 元素(列表)
????getElementsByClassName():????通過(guò)類名找到 HTML 元素(列表)
????getelementsByName():????通過(guò)name屬性找到HTML元素(列表)
????2、間接查找:
????parentNode ?父節(jié)點(diǎn)
????childNodes?? ? 所有子節(jié)點(diǎn)
????firstChild????? ? 第一個(gè)子節(jié)點(diǎn)
????lastChild?? ? 最后一個(gè)子節(jié)點(diǎn)
????nextSibling?? ? 下一個(gè)兄弟節(jié)點(diǎn)
????previousSibling ? 上一個(gè)兄弟節(jié)點(diǎn)
????parentElement?? ?父節(jié)點(diǎn)標(biāo)簽元素
????children???????? ?所有子標(biāo)簽
????firstElementChild ? 第一個(gè)子標(biāo)簽元素
????lastElementChild? ?最后一個(gè)子標(biāo)簽元素
????nextElementtSibling? ? 下一個(gè)兄弟標(biāo)簽元素
????previousElementSibling ? 上一個(gè)兄弟標(biāo)簽元素
????3、添加刪除節(jié)點(diǎn)和元素:
操作方法:
????innerText?? ?文本,指定ID下所有文本的拼接,去除間隔的HTML元素
????outerText??寫(xiě)模式下,替換所有子元素
????innerHTML?? ?會(huì)根據(jù)指定的值創(chuàng)建新的 DOM 樹(shù),然后用這個(gè) DOM 樹(shù)完全替換調(diào)用元素原先的所有子節(jié)點(diǎn)。
????outerHTML?? ?寫(xiě)模式下,新的元素替換原有的 DOM 樹(shù)
????value?????? ??屬性可設(shè)置或返回密碼域的默認(rèn)值。獲取文本框的值。?
?
Class屬性操作(CSS樣式表名):
????className?獲取所有類名
????classList.remove(cls)?刪除指定類
????classList.add(cls)? 添加類
checkbox屬性:
????checkbox.checked:true選中,false不選
tag標(biāo)簽操作:
????1、createElement()創(chuàng)建標(biāo)簽: ??
???????? 每個(gè)HTML標(biāo)簽都有自己的屬性,屬性參照:https://www.w3school.com.cn/jsref/dom_obj_anchor.asp
function?append_tag(){ ???var?a?=?document.createElement('a') ???var?cur?=?document.getElementById('dd') ???a.innerHTML='click?me' ???a. ???a.className='a1' ???cur.appendChild(a)????//添加標(biāo)簽 } \\----------等同于 var?a_tag="click?me"
????2、操作標(biāo)簽:
????
????insertAdjacentText('位置',obj)?在指定的地方插入文本內(nèi)容,如果是HTML對(duì)象會(huì)以文本形式顯示出來(lái)
????insertAdjacentHTML('位置',obj)?在指定的地方插入html內(nèi)容
????位置說(shuō)明:
????????beforeBegin:標(biāo)簽起始位置前(標(biāo)簽前)
????????afterBegin:標(biāo)簽起始位置后(標(biāo)簽內(nèi))
????????beforeEnd:標(biāo)簽結(jié)束位置前(標(biāo)簽內(nèi))
????????afterEnd:????標(biāo)簽結(jié)束位置后(標(biāo)簽外)
使用筆記本時(shí)上傳
????3、標(biāo)簽樣式操作style:
var?obj?=?document.getElementById('i1') obj.style.fontSize?=?"32px"; obj.style.backgroundColor?=?"red";
????4、位置操作
????document.documentElement.offsetHeight??? 總文檔高度
????document.documentElement.clientHeight??? 當(dāng)前文檔占屏幕高度
????tag.offsetHeight??? 自身高度
????tag.offsetTop??? 距離上級(jí)定位高度
????tag.offsetParent?父定位標(biāo)簽
????tag.scrollTop?滾動(dòng)高度
/* ????clientHeight?->?可見(jiàn)區(qū)域:height?+?padding ????clientTop????->?border高度 ????offsetHeight?->?可見(jiàn)區(qū)域:height?+?padding?+?border ????offsetTop????->?上級(jí)定位標(biāo)簽的高度 ????scrollHeight?->?全文高:height?+?padding ????scrollTop????->?滾動(dòng)高度 ????特別的: ????????document.documentElement代指文檔根節(jié)點(diǎn) */
?
事件:
????
????addEventListener() 方法用于向指定元素添加事件句柄。
????addEventListener() 方法添加的事件句柄不會(huì)覆蓋已存在的事件句柄。
????你可以向一個(gè)元素添加多個(gè)事件句柄。
????你可以向同個(gè)元素添加多個(gè)同類型的事件句柄,如:兩個(gè) "click" 事件。
????你可以向任何 DOM 對(duì)象添加事件監(jiān)聽(tīng),不僅僅是 HTML 元素。如: window 對(duì)象。
????addEventListener() 方法可以更簡(jiǎn)單的控制事件(冒泡與捕獲)。
????當(dāng)你使用 addEventListener() 方法時(shí), ?JavaScript 從 HTML 標(biāo)記中分離開(kāi)來(lái),可讀性更強(qiáng), 在沒(méi)有控制HTML標(biāo)記時(shí)也可以添加事件監(jiān)聽(tīng)。
????你可以使用 removeEventListener() 方法來(lái)移除事件的監(jiān)聽(tīng)。
????語(yǔ)法:element.addEventListener(event, function, useCapture);
???
????事件類型:
屬性 | 此事件發(fā)生在何時(shí)... | 屬性 | 此事件發(fā)生在何時(shí)... |
onabort | 圖像的加載被中斷。 | onload | 一張頁(yè)面或一幅圖像完成加載。 |
onblur | 元素失去焦點(diǎn)。 | onmousedown | 鼠標(biāo)按鈕被按下。 |
onchange | 域的內(nèi)容被改變。 | onmousemove | 鼠標(biāo)被移動(dòng)。 |
onclick | 當(dāng)用戶點(diǎn)擊某個(gè)對(duì)象時(shí)調(diào)用的事件句柄。 | onmouseout | 鼠標(biāo)從某元素移開(kāi)。 |
ondblclick | 當(dāng)用戶雙擊某個(gè)對(duì)象時(shí)調(diào)用的事件句柄。 | onmouseover | 鼠標(biāo)移到某元素之上。 |
onerror | 在加載文檔或圖像時(shí)發(fā)生錯(cuò)誤。 | onmouseup | 鼠標(biāo)按鍵被松開(kāi)。 |
onfocus | 元素獲得焦點(diǎn)。 | onreset | 重置按鈕被點(diǎn)擊。 |
onkeydown | 某個(gè)鍵盤(pán)按鍵被按下。 | onresize | 窗口或框架被重新調(diào)整大小。 |
onkeypress | 某個(gè)鍵盤(pán)按鍵被按下并松開(kāi)。 | onselect | 文本被選中。 |
onkeyup | 某個(gè)鍵盤(pán)按鍵被松開(kāi)。 | onsubmit | 確認(rèn)按鈕被點(diǎn)擊。 |
onunload | 用戶退出頁(yè)面。 |
?鍵盤(pán)鼠標(biāo)事件:
屬性 | 描述 |
altKey | 返回當(dāng)事件被觸發(fā)時(shí),"ALT"是否被按下。 |
button | 返回當(dāng)事件被觸發(fā)時(shí),哪個(gè)鼠標(biāo)按鈕被點(diǎn)擊。 |
clientX | 返回當(dāng)事件被觸發(fā)時(shí),鼠標(biāo)指針的水平坐標(biāo)。 |
clientY | 返回當(dāng)事件被觸發(fā)時(shí),鼠標(biāo)指針的垂直坐標(biāo)。 |
ctrlKey | 返回當(dāng)事件被觸發(fā)時(shí),"CTRL"鍵是否被按下。 |
metaKey | 返回當(dāng)事件被觸發(fā)時(shí),"meta"鍵是否被按下。 |
relatedTarget | 返回與事件的目標(biāo)節(jié)點(diǎn)相關(guān)的節(jié)點(diǎn)。 |
screenX | 返回當(dāng)某個(gè)事件被觸發(fā)時(shí),鼠標(biāo)指針的水平坐標(biāo)。 |
screenY | 返回當(dāng)某個(gè)事件被觸發(fā)時(shí),鼠標(biāo)指針的垂直坐標(biāo)。 |
shiftKey | 返回當(dāng)事件被觸發(fā)時(shí),"SHIFT"鍵是否被按下。 |
?
小例子:
1、文本框默認(rèn)文字
?2、添加標(biāo)簽
function?b_b(){ ????var?std=document.getElementById('std'); ????var?new_b=""; ????std.insertAdjacentHTML('beforeBegin',new_b); } function?a_b(){ ????var?std=document.getElementById('std'); ????var?new_b=""; ????std.insertAdjacentHTML('afterBegin',new_b); } function?b_e(){ ????var?std=document.getElementById('std'); ????var?new_b=""; ????std.insertAdjacentHTML('beforeEnd',new_b); } function?a_e(){ ???? ????var?std=document.getElementById('std'); ????var?new_b=""; ????std.insertAdjacentHTML('afterEnd',new_b); }
?3、展開(kāi)同時(shí)隱藏其它子菜單:
????????HTML:
????人員管理????????????????????????????
????- 1
????????????- 2
????????????- 3
????????????- 4
????????????- 5
????????????- 6
????????????- 7
????????組別管理????????????????????????
????- 1
????????????- 2
????????????- 3
????????????- 4
????????????- 5
????????????- 6
????????????- 7
????????
????????JS:
function?show_sub_menu(th){ ????var?parentId?=?th.id; ????var?childId='s'+parentId; ????var?childE=document.getElementById('left_menu').children; ????for?(var?s?in?childE){ ????????var?e=childE[s].classList; ????????console.log(e); ????????if?(e){ ????????????if?(childE[s].id==childId){ ????????????????childE[s].classList.add('show'); ????????????}else{ ????????????????childE[s].classList.remove('show'); ????????????} ?????????} ????} }
?4、標(biāo)簽提交:
?
?5、html、css、js頁(yè)面分離:生產(chǎn)環(huán)境的寫(xiě)法。
????? ?每類存儲(chǔ)為單獨(dú)的文件,其中js使用dom添加事件方法,可以html更簡(jiǎn)潔。
例子:鼠標(biāo)移動(dòng)表格行變色
????HTML:
1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
?????JS:給table添加屬性和class
????var?t=document.getElementById('tb').classList; ????t.add('tb_style'); ???? ????var?mytrs=document.getElementsByTagName('tr'); ????var?td_numbers=mytrs.length; ????for?(var?td=0;td?????css:
.tb_style{ ????bacground-color:pink; }?6、詞法分析:形參--》函數(shù)體內(nèi)函數(shù),編譯時(shí)函數(shù)體內(nèi)的函數(shù)會(huì)分配 內(nèi)存地址,覆蓋形參。
function?cifa(age){ ????console.log(age);????????\\function?age ????age=22; ????console.log(age);????????\\22 ????function?age(){}; ????console.log(age);????????\\22 } age(3)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
網(wǎng)頁(yè)名稱:JAVAScript學(xué)習(xí)3--DOM
URL地址:http://weahome.cn/article/iighid.html