1|0前戏
到目前为止,咱们已经学过了JavaScript的一些简单的语法。可是这些简单的语法,并无和浏览器有任何交互。html
也就是咱们还不能制做一些咱们常常看到的网页的一些交互,咱们须要继续学习BOM和DOM相关知识。node
JavaScript分为 ECMAScript,DOM,BOM。浏览器
BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。app
DOM (Document Object Model)是指文档对象模型,经过它,能够访问HTML文档的全部元素。框架
Window对象是客户端JavaScript最高层对象之一,因为window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,能够省略window对象的引用。例如:window.document.write()能够简写成:document.write()。dom
1|1window对象
全部浏览器都支持 window 对象。它表示浏览器窗口。ide
*若是文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档建立一个 window 对象,并为每一个框架建立一个额外的 window 对象。函数
*没有应用于 window 对象的公开标准,不过全部浏览器都支持该对象。post
全部 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。学习
全局变量是 window 对象的属性。全局函数是 window 对象的方法。
接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。
一些经常使用的Window方法:
- window.innerHeight - 浏览器窗口的内部高度
- window.innerWidth - 浏览器窗口的内部宽度
- window.open() - 打开新窗口
- window.close() - 关闭当前窗口
1|2window的子对象
navigator对象(了解便可)
浏览器对象,经过这个对象能够断定用户所使用的浏览器,包含了浏览器相关信息。
screen对象(了解便可)
屏幕对象,不经常使用。
一些属性:
- screen.availWidth - 可用的屏幕宽度
- screen.availHeight - 可用的屏幕高度
history对象(了解便可)
window.history 对象包含浏览器的历史。
浏览历史对象,包含了用户对当前页面的浏览历史,但咱们没法查看具体的地址,能够简单的用来前进或后退一个页面。
location对象
window.location 对象用于得到当前页面的地址 (URL),并把浏览器重定向到新的页面。
经常使用属性和方法:
弹出框
能够在 JavaScript 中建立三种消息框:警告框、确认框、提示框。
警告框
警告框常常用于确保用户能够获得某些信息。
当警告框出现后,用户须要点击肯定按钮才能继续进行操做。
语法:
确认框(了解便可)
确认框用于使用户能够验证或者接受某些信息。
当确认框出现后,用户须要点击肯定或者取消按钮才能继续进行操做。
若是用户点击确认,那么返回值为 true。若是用户点击取消,那么返回值为 false。
语法:
提示框(了解便可)
提示框常常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户须要输入某个值,而后点击确认或取消按钮才能继续操纵。
若是用户点击确认,那么返回值为输入的值。若是用户点击取消,那么返回值为 null。
语法:
计时相关
经过使用 JavaScript,咱们能够在必定时间间隔以后来执行代码,而不是在函数被调用后当即执行。咱们称之为计时事件。
setTimeout()
语法:
setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你但愿取消这个 setTimeout(),你可使用这个变量名来指定它。
setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。
第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。
clearTimeout()
语法:
举个例子:
setInterval()
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用做 clearInterval() 方法的参数。
语法:
返回值
一个能够传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。
clearInterval()
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
语法:
举个例子:
2|0DOM
DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。
当网页被加载时,浏览器会建立页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树。
2|1HTML DOM 树
DOM标准规定HTML文档中的每一个成分都是一个节点(node):
- 文档节点(document对象):表明整个文档
- 元素节点(element 对象):表明一个元素(标签)
- 文本节点(text对象):表明元素(标签)中的文本
- 属性节点(attribute对象):表明一个属性,元素(标签)才有属性
- 注释是注释节点(comment对象)
JavaScript 能够经过DOM建立动态的 HTML:
- JavaScript 可以改变页面中的全部 HTML 元素
- JavaScript 可以改变页面中的全部 HTML 属性
- JavaScript 可以改变页面中的全部 CSS 样式
- JavaScript 可以对页面中的全部事件作出反应
2|2查找标签
直接查找
注意:
涉及到DOM操做的JS代码应该放在文档的哪一个位置。
间接查找
2|3节点操做
建立节点
语法:
createElement(标签名)
示例:
添加节点
语法:
追加一个子节点(做为最后的子节点)
somenode.appendChild(newnode);
把增长的节点放到某个节点的前边。
somenode.insertBefore(newnode,某个节点);
示例:
删除节点:
语法:
得到要删除的元素,经过父元素调用该方法删除。
somenode.removeChild(要删除的节点)
替换节点:
语法:
somenode.replaceChild(newnode, 某个节点);
属性节点
获取文本节点的值:
设置文本节点的值:
attribute操做
获取值操做
语法:
elementNode.value
适用于如下标签:
- .input
- .select
- .textarea
class的操做
指定CSS操做
JS操做CSS属性的规律:
1.对于没有中横线的CSS属性通常直接使用style.属性名便可。如:
2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写便可。如:
2|4事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动做(action),好比当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动做。
经常使用事件
绑定方式:
方式一:
注意:
this是实参,表示触发事件的当前元素。
函数定义过程当中的ths为形参。
方式二:
事件示例:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <input type="text" id="i1"> <button id="b1">开始</button> <button id="b2">结束</button> <script> var t; function showTime() { var i1Ele = document.getElementById('i1'); var time = new Date(); i1Ele.value = time.toLocaleString(); } showTime(); var b1Ele = document.getElementById('b1'); b1Ele.onclick = function (ev) { if (!t){ t = setInterval(showTime,1000) } }; var b2Ele = document.getElementById('b2'); b2Ele.onclick = function (ev) { clearInterval(t); t = undefined }; </script> </body> </html>

<!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>

<!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]; // 清空option c.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>
2|5window.onload
当咱们给页面上的元素绑定事件的时候,必须等到文档加载完毕。由于咱们没法给一个不存在的元素绑定事件。
window.onload事件在文件加载过程结束的时候触发。此时,文档中的全部对象都位于DOM中,而且全部图像,脚本,连接和子框架都已完成加载。
注意:.onload()函数存在覆盖现象。