前端之 BOM 和 DOM

前言

到目前為止,我們已經學過了JavaScript的一些簡單的語法。但是這些簡單的語法,并沒有和瀏覽器有任何交互。也就是我們還不能制作一些我們經常看到的網頁的一些交互,我們需要繼續學習BOM和DOM相關知識。

JavaScript分為 ECMAScript,DOM,BOM。

  • BOM(Browser Object Model)是指瀏覽器對象模型,它使 JavaScript 有能力與瀏覽器進行“對話”。
  • DOM (Document Object Model)是指文檔對象模型,通過它,可以訪問HTML文檔的所有元素。

Window對象是客戶端JavaScript最高層對象之一,由于window對象是其它大部分對象的共同祖先,在調用window對象的方法和屬性時,可以省略window對象的引用。例如:window.document.write()可以簡寫成:document.write()

window對象

所有瀏覽器都支持?window?對象。它表示瀏覽器窗口。

*如果文檔包含框架(frame 或 iframe 標簽),瀏覽器會為 HTML 文檔創建一個 window 對象,并為每個框架創建一個額外的 window 對象。

*沒有應用于 window 對象的公開標準,不過所有瀏覽器都支持該對象。

所有 JavaScript 全局對象、函數以及變量均自動成為 window 對象的成員。

全局變量是 window 對象的屬性。全局函數是 window 對象的方法。

接下來要講的HTML DOM 的 document 也是 window 對象的屬性之一。

一些常用的Window方法:

  • window.innerHeight - 瀏覽器窗口的內部高度
  • window.innerWidth - 瀏覽器窗口的內部寬度
  • window.open() - 打開新窗口
  • window.close() - 關閉當前窗口

window的子對象

navigator對象-瀏覽器對象(了解即可)

瀏覽器對象,通過這個對象可以判定用戶所使用的瀏覽器,包含了瀏覽器相關信息。

  • navigator.appName  ? ?// Web瀏覽器全稱
  • navigator.appVersion  // Web瀏覽器廠商和版本的詳細字符串
  • navigator.userAgent  ?// 客戶端絕大部分信息
  • navigator.platform   // 瀏覽器運行所在的操作系統

screen對象-屏幕對象(了解即可)

屏幕對象,不常用。一些屬性:

  • screen.availWidth? // 可用的屏幕寬度
  • screen.availHeight // 可用的屏幕高度

history對象

window.history 對象包含瀏覽器的歷史。但我們無法查看具體的地址,可以簡單的用來前進或后退一個頁面。

  • history.forward()? // 前進一頁
  • history.back()? ? ? // 后退一頁
  • history.go(參數)?? ?加載 history 列表中的某個具體頁面。
    • * 正數:前進幾個歷史記錄
    • * 負數:后退幾個歷史記錄
  • history.length?? ?返回當前窗口歷史列表中的 URL 數量。

location對象

window.location 對象用于獲得當前頁面的地址 (URL),并把瀏覽器重定向到新的頁面。常用屬性和方法:

  • location.href? ? ? ? ? ? ? ?// 獲取URL
  • location.href="URL"? ?// 跳轉到指定頁面
  • location.reload()? ? ? ? ?// 重新加載頁面

彈出框

可以在 JavaScript 中創建三種消息框:警告框、確認框、提示框。

警告框

警告框經常用于確保用戶可以得到某些信息。當警告框出現后,用戶需要點擊確定按鈕才能繼續進行操作。

語法:alert("你看到了嗎?");

確認框(了解即可)

  • 確認框用于使用戶可以驗證或者接受某些信息。
  • 當確認框出現后,用戶需要點擊確定或者取消按鈕才能繼續進行操作。
  • 如果用戶點擊確認,那么返回值為 true。如果用戶點擊取消,那么返回值為 false。

語法:confirm("你確定嗎?")

提示框(了解即可)

  • 提示框經常用于提示用戶在進入頁面前輸入某個值。
  • 當提示框出現后,用戶需要輸入某個值,然后點擊確認或取消按鈕才能繼續操縱。
  • 如果用戶點擊確認,那么返回值為輸入的值。如果用戶點擊取消,那么返回值為 null。

語法:prompt("請在下方輸入","你的答案")

計時相關

通過使用 JavaScript,我們可以在一定時間間隔之后來執行代碼,而不是在函數被調用后立即執行。我們稱之為計時事件。

setTimeout()

語法:var t=setTimeout("JS語句",毫秒)

  • setTimeout() 方法會返回某個值。在上面的語句中,值被儲存在名為 t 的變量中。假如你希望取消這個 setTimeout(),你可以使用這個變量名來指定它。
  • setTimeout() 的第一個參數是含有 JavaScript 語句的字符串。這個語句可能諸如 "alert('5 seconds!')",或者對函數的調用,諸如 alertMsg()"。
  • 第二個參數指示從當前起多少毫秒后執行第一個參數(1000 毫秒等于一秒)。

clearTimeout()

語法:clearTimeout(setTimeout_variable)

// 在指定時間之后執行一次相應函數
var timer = setTimeout(function(){alert(123);}, 3000)
// 取消setTimeout設置
clearTimeout(timer);

setInterval()

語法:setInterval("JS語句",時間間隔)

返回值:一個可以傳遞給 Window.clearInterval() 從而取消對 code 的周期性執行的值。

  • setInterval() 方法可按照指定的周期(以毫秒計)來調用函數或計算表達式。
  • setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數。

clearInterval()

語法:clearInterval(setinterval返回的ID值)

  • clearInterval() 方法可取消由 setInterval() 設置的 timeout。
  • clearInterval() 方法的參數必須是由 setInterval() 返回的 ID 值。
// 每隔一段時間就執行一次相應函數
var timer = setInterval(function(){console.log(123);}, 3000)
// 取消setInterval設置
clearInterval(timer);

稍微大一點的示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>定時器</title><script>var intervalId;function f() {var timeStr = (new Date()).toLocaleString();var inputEle = document.getElementById("i1");inputEle.value = timeStr;}function start() {f();if (intervalId === undefined) {intervalId = setInterval(f, 1000);}}function end() {clearInterval(intervalId);intervalId = undefined;}</script>
</head>
<body><input type="text" id="i1">
<input type="button" value="開始" id="start" onclick="start();">
<input type="button" value="結束" id="end" onclick="end();">
</body>
</html>

DOM

DOM(Document Object Model)是一套對文檔的內容進行抽象和概念化的方法。當網頁被加載時,瀏覽器會創建頁面的文檔對象模型(Document Object Model)。HTML DOM 模型被構造為對象的樹。

W3C DOM 標準被分為 3 個不同的部分:

  • 核心 DOM - 針對任何結構化文檔的標準模型
  • XML DOM - 針對 XML 文檔的標準模型
  • HTML DOM - 針對 HTML 文檔的標準模型

HTML DOM 樹

DOM標準規定HTML文檔中的每個成分都是一個節點(node):

  • 文檔節點(document對象):代表整個文檔
  • 元素節點(element 對象):代表一個元素(標簽)
  • 文本節點(text對象):代表元素(標簽)中的文本
  • 屬性節點(attribute對象):代表一個屬性,元素(標簽)才有屬性
  • 注釋是注釋節點(comment對象)

JavaScript 可以通過DOM創建動態的 HTML:

  • JavaScript 能夠改變頁面中的所有 HTML 元素
  • JavaScript 能夠改變頁面中的所有 HTML 屬性
  • JavaScript 能夠改變頁面中的所有 CSS 樣式
  • JavaScript 能夠對頁面中的所有事件做出反應

查找標簽

直接查找

  • document.getElementById? ? ? ? ? ? ? ? ? // 根據id屬性值獲取元素對象。id屬性值一般唯一
  • document.getElementsByClassName // 根據Class屬性值獲取元素對象們。返回值是一個數組
  • document.getElementsByTagName? ? //?根據元素名稱獲取元素對象們。返回值是一個數組
  • getElementsByName()? ? ? ? ? ? ? ? ? ? ? ? // 根據name屬性值獲取元素對象們。返回值是一個數組

間接查找

  • parentElement? ? ? ? ? ? ?// 父節點標簽元素
  • children? ? ? ? ? ? ? ? ? ? ? ? // 所有子標簽
  • firstElementChild? ? ? ? ? // 第一個子標簽元素
  • lastElementChild? ? ? ? ? // 最后一個子標簽元素
  • nextElementSibling? ? ? ?//?下一個兄弟標簽元素
  • previousElementSibling //?上一個兄弟標簽元素

節點操作

創建節點

//語法:
createElement(標簽名)//示例:
var divEle = document.createElement("div");

添加節點

// 語法:
// 追加一個子節點(作為最后的子節點)
somenode.appendChild(newnode);
// 把增加的節點放到某個節點的前邊。
somenode.insertBefore(newnode,某個節點);// 示例:
var imgEle=document.createElement("img");
imgEle.setAttribute("src", "http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
var d1Ele = document.getElementById("d1");
d1Ele.appendChild(imgEle);

刪除節點:

// 獲得要刪除的元素,通過父元素調用該方法刪除。
somenode.removeChild(要刪除的節點)

替換節點:

// 語法:
somenode.replaceChild(newnode, 某個節點);

屬性節點操作

// 獲取文本節點的值:
var divEle = document.getElementById("d1")
divEle.innerText
divEle.innerHTML// 設置文本節點的值:
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>"// attribute操作
var divEle = document.getElementById("d1");
divEle.setAttribute("age","18")
divEle.getAttribute("age")
divEle.removeAttribute("age")// 自帶的屬性還可以直接.屬性名來獲取和設置
imgEle.src
imgEle.src="..."

獲取值操作

語法:elementNode.value

適用于以下標簽:

  • .input
  • .select
  • .textarea
var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);

class的操作

var c1Ele=document.getElementsByClassName('c1')[0]c1Ele.className  獲取所有樣式類名(字符串)
c1Ele.classList.remove(cls)  刪除指定類
c1Ele.classList.add(cls)  添加類
c1Ele.classList.contains(cls)  存在返回true,否則返回false
c1Ele.classList.toggle(cls)  存在就刪除,否則添加

指定CSS操作

obj.style.backgroundColor="red"

JS操作CSS屬性的規律:

1.對于沒有中橫線的CSS屬性一般直接使用style.屬性名即可。如:

  • obj.style.margin
  • obj.style.width
  • obj.style.left
  • obj.style.position

2.對含有中橫線的CSS屬性,將中橫線后面的第一個字母換成大寫即可。如:

  • obj.style.marginTop
  • obj.style.borderLeftWidth
  • obj.style.zIndex
  • obj.style.fontFamily

事件

HTML 4.0 的新特性之一是有能力使 HTML 事件觸發瀏覽器中的動作(action),比如當用戶點擊某個 HTML 元素時啟動一段 JavaScript。下面是一個屬性列表,這些屬性可插入 HTML 標簽來定義事件動作。

常用事件

點擊事件
onclick        當用戶點擊某個對象時調用的事件句柄。
ondblclick     當用戶雙擊某個對象時調用的事件句柄。焦點事件
onfocus        元素獲得焦點。               // 練習:輸入框
onblur         元素失去焦點。               應用場景:用于表單驗證,用戶離開某個輸入框時,代表已經輸入完了,我們可以對它進行驗證.鍵盤事件
onkeydown      某個鍵盤按鍵被按下。          應用場景: 當用戶在最后一個輸入框按下回車按鍵時,表單提交.
onkeypress     某個鍵盤按鍵被按下并松開。
onkeyup        某個鍵盤按鍵被松開。加載事件
onload         一張頁面或一幅圖像完成加載。鼠標事件
onmousedown    鼠標按鈕被按下。
onmousemove    鼠標被移動。
onmouseout     鼠標從某元素移開。
onmouseover    鼠標移到某元素之上。選擇和改變
onselect      在文本框中的文本被選中時發生。
onchange      域的內容被改變。             應用場景:通常用于表單元素,當元素內容被改變時觸發.(select聯動)表單事件
onsubmit      確認按鈕被點擊,使用的對象是form。
onreset	      重置按鈕被點擊

?綁定方式:

方式一:

<div id="d1" onclick="changeColor(this);">點我</div>
<script>function changeColor(ths) {ths.style.backgroundColor="green";}
</script>i

注意:this 是實參,表示觸發事件的當前元素。函數定義過程中的ths為形參。

方式二:

<div id="d2">點我</div>
<script>var divEle2 = document.getElementById("d2");divEle2.onclick=function () {this.innerText="呵呵";}
</script>

搜索框示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>搜索框示例</title></head>
<body><input id="d1" type="text" value="請輸入關鍵字" onblur="blur()" onfocus="focus()"><script>
function focus(){var inputEle=document.getElementById("d1");if (inputEle.value==="請輸入關鍵字"){inputEle.value="";}
}function blur(){var inputEle=document.getElementById("d1");var val=inputEle.value;if(!val.trim()){inputEle.value="請輸入關鍵字";}
}
</script>
</body>
</html>

select聯動

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>select聯動</title>
</head>
<body>
<select id="province"><option>請選擇省:</option>
</select><select id="city"><option>請選擇市:</option>
</select><script>data = {"河北省": ["廊坊", "邯鄲"], "北京": ["朝陽區", "海淀區"], "山東": ["威海市", "煙臺市"]};var p = document.getElementById("province");var c = document.getElementById("city");for (var i in data) {var optionP = document.createElement("option");optionP.innerHTML = i;p.appendChild(optionP);}p.onchange = function () {var pro = (this.options[this.selectedIndex]).innerHTML;var citys = data[pro];// 清空optionc.innerHTML = "";for (var i=0;i<citys.length;i++) {var option_city = document.createElement("option");option_city.innerHTML = citys[i];c.appendChild(option_city);}}
</script>
</body>
</html>

window.onload

當我們給頁面上的元素綁定事件的時候,必須等到文檔加載完畢。因為我們無法給一個不存在的元素綁定事件。

window.onload事件在文件加載過程結束的時候觸發。此時,文檔中的所有對象都位于DOM中,并且所有圖像,腳本,鏈接和子框架都已完成加載。

注意:.onload()函數存在覆蓋現象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何給FLV文件加字幕

如何給FLV文件加字幕關鍵字&#xff1a;FFMPEG AVS 字幕 本文只是收集工作中的一點經驗和積累&#xff0c;如果你能從本文中得到收獲&#xff0c;或者得到啟發。那將是我最開心的事情。 本文面向的讀者是對FFMPEG以及AVS有一定基礎的&#xff0c;對電腦有一定基礎的&#xff…

化工圖紙中LISP_必備干貨丨石油化工安裝工程質量與成本控制研究

對于整個石油化工工程來說&#xff0c;石油化工的安裝工程在其中是最重要并且最核心的一個環節&#xff0c;其對石油化工工程的質量有著決定性的作用。從客觀的角度來說&#xff0c;如果石油化工安裝工程在實際的施工過程中出現任何的問題&#xff0c;就會威脅到周邊人群的生命…

[原創]windows server 2012 AD架構 試驗 系列 – 15解決AD復制沖突

[原創]windows server 2012 AD架構 試驗 系列 – 15解決AD復制沖突 這節我詳細說下 ADDS使用stamp來作為解決沖突的依據 Stamp由三塊組成 Version, time stamp , source DC GUID (發生對象修改行為的源DC的GUID) 一般來說沖突分為幾下情況: 1-屬性沖突 你可以用repadmin來查看版…

Python全局變量和局部變量

全局變量和局部變量 定義在函數內部的變量擁有一個局部作用域&#xff0c;定義在函數外的擁有全局作用域。   局部變量只能在其被聲明的函數內部訪問&#xff0c;而全局變量可以在整個程序范圍內訪問。調用函數時&#xff0c;所有在函數內聲明的變量名稱都將被加入到作用域中…

前端之 jQuery 入門

jQuery介紹 jQuery是一個輕量級的、兼容多瀏覽器的JavaScript庫。jQuery使用戶能夠更方便地處理HTML Document、Events、實現動畫效果、方便地進行Ajax交互&#xff0c;能夠極大地簡化JavaScript編程。它的宗旨就是&#xff1a;“Write less, do more.“ jQuery的優勢 一款輕…

python劍指offer替換空格_迷人的算法-劍指offer面試題5:替換空格

題目&#xff1a;請實現一個函數&#xff0c;把字符串中的每個空格替換成"%20"。例如&#xff0c;輸入"We are happy."&#xff0c;則輸出"We%20are%20happy."。此題看似簡單&#xff0c;實則坑還是比較多的。替換字符的長度有變化&#xff0c;由…

音頻視頻解決方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

音頻視頻編程相關&#xff1a;GStreamer/ffmpeg/directshow/vfw linux和window下幾種流行的音頻視頻編程框架作一個總結&#xff0c;防止自己迷惘&#xff0c;免于暈頭轉向。 一、GStreamer GStreamer is a library that allows the construction of graphs of media-handlin…

Linux 將進程放入后臺執行,解決網絡,ssh斷開導致進程結束(nohup, setsid, , disown)...

Linux 將進程放入后臺執行&#xff0c;解決網絡&#xff0c;ssh斷開導致進程結束&#xff08;nohup, setsid, &, disown&#xff09; 1、nohup 命令 我們知道&#xff0c;當用戶注銷&#xff08;logout&#xff09;或者網絡斷開時&#xff0c;終端會收到 HUP&#xff08;…

bzoj1927

1927: [Sdoi2010]星際競速Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2556 Solved: 1580[Submit][Status][Discuss] Description 10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一&#xff0c;奪得這個項目的冠軍無疑是很多人的夢想&#xff0c;來自杰…

python until怎么用_python基礎之從認識python到python的使用

python的歷史&#xff1a;python的創始人是吉多范羅蘇姆(Guido van Rossum)&#xff0c;人稱“龜叔”&#xff0c;1989年圣誕節期間&#xff0c;Guido開始寫Python語言的編譯器。他希望這個叫做Python的語言能符合他的理想&#xff1a;創造一種C和shell之間&#xff0c;功能全面…

前端之同源策略 Jsonp 與 CORS

同源策略 同源策略&#xff08;Same origin policy&#xff09;是一種約定&#xff0c;它是瀏覽器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的&#xff0c;瀏覽器只是針對同…

vue新手入門——vue-cli搭建

首先說明&#xff0c;以下內容vue官網都有文檔&#xff0c;如果覺得麻煩啰嗦&#xff0c;請移步至 安裝-vue.js 。 準備工作&#xff1a; 1.下載并安裝node環境&#xff0c;一般情況下安裝好node之后&#xff0c;npm也會安裝好。具體安裝的話&#xff0c;百度大概能幫得上忙。 …

如何看懂源代碼–(分析源代碼方法)

我們在寫程式時&#xff0c;有不少時間都是在看別人的代碼。例如看小組的代碼&#xff0c;看小組整合的守則&#xff0c;若一開始沒規劃怎么看&#xff0c; 就會“嚕看嚕苦&#xff08;臺語&#xff09; ” 不管是參考也好&#xff0c;從開源抓下來研究也好&#xff0c;為了了解…

linux關于安裝

一&#xff0e;安裝gcc gcc cloog-ppl ppl(libppl.so.7/libppl_c.so.2) cpp mpfr(libmpfr.so.1) gcc-c libstdc-devel mpfr-2.4.1-6.el6.i686.rpm和ppl-0.10.2-11.el6.i686.rpm 快捷鍵rz sz&#xff1a; rz、sz命令沒找到&#xff1f; 安裝lrzsz即可&#xff1a; shell># y…

python cmath模塊_cmath模塊-PYTHON

這是一個float型的常數>>> cmath.e2.718281828459045>>> type(cmath.e)文檔>>> import cmath>>> help(cmath)Help on module cmath:NAMEcmathFILE/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cm…

Python 第三方模塊之 pdfkit

pdfkit&#xff0c;把 HTMLCSS 格式的文件轉換成 PDF 格式文檔的一個工具。 其實&#xff0c;pdfkit 是 html 轉成 pdf 工具包 wkhtmltopdf 的 Python 封裝。所以&#xff0c;首先安裝 wkhtmltopdf 。 一般情況下&#xff0c;wkhtmltopdf需要手動安裝&#xff0c;網站是 https…

LNMP環境添加第三方模塊

一.在LNMP環境下添加memcache模塊 1.安裝依賴庫(libevent) [rootnode1 ~]# tar xvf libevent-2.0.21-stable.tar.gz [rootnode1 ~]# cd libevent-2.0.21-stable [rootnode1 libevent-2.0.21-stable]# ./configure --prefix/usr/local/libevent [rootnode1 libevent-2.0.21-sta…

學生成績管理系統-程序維護

托管平臺地址&#xff1a;https://gitee.com/lucess/StudentMarkManage.git 小組名稱:干翻沈師 程序運行方法: 1、后臺服務&#xff1a;進入項目文件夾執行 python TeamProject.py runsercer 0.0.0.0:5050 2、前臺服務&#xff1a;進入./WEB-INFO/TeamProjectWeb 文件夾執行 ya…

改需求

轉載于:https://www.cnblogs.com/gw2010/p/7856484.html

架構師一般做到多少歲_軟件測試可以做到多大歲數?

做這個行業也幾年了&#xff0c;經常聽到有人問&#xff0c;軟件測試這個行業能干到多少歲&#xff0c;當然里邊包含想要進入這個行業的和已經在這個行業里邊發展的&#xff01;基本上軟件測試可以分為三條職業發展路線&#xff1a;技術路線、管理路線、產品路線&#xff01;目…