JavaScript 之 BOM 和 DOM
0、前言
到目前为止,我们已经学过了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()
。
1、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()
:关闭当前窗口
2、window 的子对象
2.1、navigator 对象-浏览器对象(了解即可)
浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。
navigator.appName
: Web浏览器全称navigator.appVersion
: Web浏览器厂商和版本的详细字符串navigator.userAgent
: 客户端绝大部分信息navigator.platform
: 浏览器运行所在的操作系统
2.2、screen 对象-屏幕对象(了解即可)
屏幕对象,不常用。一些属性:
screen.availWidth
: 可用的屏幕宽度screen.availHeight
: 可用的屏幕高度
2.3、history 对象
window.history 对象包含浏览器的历史。但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。
history.forward()
: 前进一页history.back()
: 后退一页history.go(参数)
: 加载 history 列表中的某个具体页面。- 正数:前进几个历史记录
- 负数:后退几个历史记录
history.length
: 返回当前窗口历史列表中的 URL 数量。
2.4、location 对象
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。常用属性和方法:
location.href
: 获取URLlocation.href="URL"
: 跳转到指定页面location.reload()
: 重新加载页面
2.5、弹出框 相关
在 JavaScript 中可以创建三种消息框:警告框、确认框、提示框。
2.5.1、警告框
警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。
语法:alert("你看到了吗?");
2.5.2、确认框(了解即可)
确认框用于使用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。
语法:confirm("你确定吗?")
2.5.3、提示框(了解即可)
提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
语法:prompt("请在下方输入","你的答案")
2.6、计时相关
通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。
setTimeout()
语法:var t=setTimeout("JS语句",毫秒)
setTimeout()
方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。setTimeout()
的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如alert('5 seconds!')
,或者对函数的调用,诸如alertMsg()
“。- 第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。
clearTimeout()
语法:clearTimeout(setTimeout_variable)
1 |
|
setInterval()
语法:setInterval("JS语句",时间间隔)
返回值:一个可以传递给 Window.clearInterval()
从而取消对 code 的周期性执行的值。
setInterval()
方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval()
方法会不停地调用函数,直到clearInterval()
被调用或窗口被关闭。由setInterval()
返回的 ID 值可用作clearInterval()
方法的参数。
clearInterval()
语法:clearInterval(setinterval返回的ID值)
clearInterval()
方法可取消由setInterval()
设置的 timeout。clearInterval()
方法的参数必须是由setInterval()
返回的 ID 值。
1 |
|
稍微大一点的示例:
1 |
|
2.7、window.onload
当我们给页面上的元素绑定事件的时候,必须等到文档加载完毕。因为我们无法给一个不存在的元素绑定事件。
window.onload
事件在文件加载过程结束的时候触发。此时,文档中的所有对象都位于DOM中,并且所有图像,脚本,链接和子框架都已完成加载。
注意:.onload()
函数存在覆盖现象。
3、DOM
DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。
W3C DOM 标准被分为 3 个不同的部分:
- 核心 DOM:针对任何结构化文档的标准模型
- XML DOM:针对 XML 文档的标准模型
- HTML DOM:针对 HTML 文档的标准模型
3.1、HTML DOM 树
DOM 标准规定HTML文档中的每个成分都是一个节点(node):
- 文档节点(document对象):代表整个文档
- 元素节点(element 对象):代表一个元素(标签)
- 文本节点(text对象):代表元素(标签)中的文本
- 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
- 注释是注释节点(comment对象)
JavaScript 可以通过 DOM 创建动态的 HTML:
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
3.1、查找标签
3.1.1、直接查找
document.getElementById()
: 根据id属性值获取元素对象。id属性值一般唯一document.getElementsByClassName()
: 根据Class属性值获取元素对象们。返回值是一个数组document.getElementsByTagName()
: 根据元素名称获取元素对象们。返回值是一个数组getElementsByName()
: 根据name属性值获取元素对象们。返回值是一个数组
3.1.2、间接查找
parentElement
: 父节点标签元素children
: 所有子标签firstElementChild
: 第一个子标签元素lastElementChild
: 最后一个子标签元素nextElementSibling
: 下一个兄弟标签元素previousElementSibling
: 上一个兄弟标签元素
3.2、节点操作
3.2.1、创建节点
1 |
|
3.2.2、添加节点
1 |
|
3.2.3、删除节点
1 |
|
3.2.4、替换节点
1 |
|
3.2.5、属性节点操作
1 |
|
3.2.6、获取值操作
语法:elementNode.value
适用于以下标签:
- .input
- .select
- .textarea
1 |
|
3.2.7、class的操作
1 |
|
3.2.8、指定CSS操作
1 |
|
JS操作CSS属性的规律:
对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
obj.style.margin
obj.style.width
obj.style.left
obj.style.position
对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:
obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily
4、事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。
4.1、常用事件
1 |
|
4.2、绑定方式:
方式一:
1 |
|
注意:this 是实参,表示触发事件的当前元素。函数定义过程中的ths为形参。
方式二:
1 |
|
搜索框示例
1 |
|
select联动
1 |
|