文章目录
前言
继ECMA5基础语法后的学习,开始学习DOM和BOM的操作,本文适合刚刚学习前端的初学者,保证可以看懂,在此文更完后,会考虑更jQuery,虽说jQuery已经过时了,但是我个人觉得对于学习完DOM的同学是很有学习上的帮助的,对学习Ajax也很有帮助
一、WebAPI(DOM,BOM)
1. WebAPI和JS的基础关联性
1.1 JavaScript组成
我们之前在ECMA基础语法的学习中知道了JavaScript是由三部分组成的
1.ECMAScript
2.DOM
3.BOM
1.2 WebAPI
- WebAPI是W3C组织的标准
- WebAPI主要是学习DOM和BOM
- WebAPI是JS独有的部分
- WebAPI主要学习页面交互功能
2. API
2.1 什么是API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。
简单理解 :API是给程序员提供的一种工具,以便能更轻松地实现想要的功能
2.2 什么是WebAPI
Web API 是浏览器提供的一套操作浏览器功能(BOM)和页面元素(DOM)的 API
因为WebAPI太多,所以WebAPI也称为WebAPIs(就是复数呗)
此处的 Web API 特指浏览器提供的一系列API(很多函数或对象方法),即操作网页的一系列工具。例如:操作html标签、操作页面地址的方法。
3. API 和 Web API 总结
-
API 是为我们程序员提供的一个接口,帮助我们实现某种功能,我们会使用就可以了,不必纠结内部如何实现
-
Web API 主要是针对于浏览器提供的接口,主要针对于浏览器做交互效果。
-
Web API 一般都有输入和输出(函数的传参和返回值),Web API 很多都是方法(函数)
-
学习 Web API 可以结合前面学习内置对象方法的思路学习
二、DOM
1. DOM的简介
1.1 什么是DOM
文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或者xhtml)的标准编程接口。
W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。
1.2 DOM树
DOM树 又称为文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。
- 文档:一个页面就是一个文档,DOM中用document来表示
- 元素:页面中所有的标签都是元素,DOM中用element来表示
- 节点:页面中所有的内容都是节点(标签,属性,文本,注释等),DOM中用node来表示
- DOM中把以上所有内容都看作是对象
2. 获取元素
2.1 什么是获取元素
获取元素就是把页面中的元素选中,因为去对这个元素进行操作的话,首先先要把这个元素选中才可以
2.2 如何获取页面元素
根据ID获取
根据标签名获取
通过HTML5新增的方法获取
特殊元素获取
2.2.1 根据ID获取
语法:document.getElementById(id)
作用:根据ID获取元素对象
参数:id值,区分大小写的字符串
返回值:元素对象 或 null
<body>
<div id="time">这是一个div</div>
<script>
//1.因为我们文档页面从上往下加载,所以得先有标签,所以script写到标签下面
//2.get:获取 element:元素 通过:by
//3.参数id是大小写敏感的字符串
//4.返回的是一个元素对象
var timer = document.getElementById('time');
console.log(timer);
console.log(typeof timer);
//5.通过console.dir打印我们返回的对象,更好地查看里面的属性和方法
console.dir(timer);
</script>
</body>
2.2.2 根据标签名获取
语法:document.getElementsByTagName(‘标签名’) 或者 element.getElementsByTagName(‘标签名’)
作用:根据标签名获取元素对象
参数:标签名
返回值:元素对象集合(伪数组,数组元素是元素对象)
使用getElementsByTagName(‘标签名’)方法可以返回带有指定标签名的对象的集合,还可以获取某个元素(父元素)内部所有指定标签的子元素
注意: 父元素必须是单个对象(必须指明是哪一个元素),获取的时候不包括元素自己
<body>
<ul>
<li>知否知否,应是等你好久11</li>
<li>知否知否,应是等你好久22</li>
<li>知否知否,应是等你好久33</li>
<li>知否知否,应是等你好久44</li>
<li>知否知否,应是等你好久55</li>
</ul>
<ul id="nav">
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
<li>生僻字</li>
</ul>
<script>
// 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的
var lis = document.getElementsByTagName('li');
console.log(lis);
console.log(lis[0]);
// 2. 我们想要依次打印里面的元素对象我们可以采取遍历的方式
for (var i = 0; i < lis.length; i++) {
console.log(lis[i]);
}
// 3. element.getElementsByTagName() 可以得到这个元素里面的某些标签
var nav = document.getElementById('nav'); // 这个获得nav 元素
var navLis = nav.getElementsByTagName('li');
console.log(navLis);
</script>
</body>
注意:getElementsByTagName()获取到是动态集合,即:当页面增加了标签,这个集合中也就增加了元素。
2.2.3 通过HTML5新增的方法获取
document.getElementsByClassName(‘类名’) //根据类名返回元素对象集合
document.querySelector(‘选择器’)//根据指定选择器返回第一个元素对象
document.querySelectorAll(‘选择器’)//根据指定选择器返回
<body>
<div class="box">盒子1</div>
<div class="box">盒子2</div>
<div id="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
// 1. getElementsByClassName 根据类名获得某些元素集合
var boxs = document.getElementsByClassName('box');
console.log(boxs);
// 2. querySelector 返回指定选择器的第一个元素对象 切记 里面的选择器需要加符号 .box #nav
var firstBox = document.querySelector('.box');
console.log(firstBox);
var nav = document.querySelector('#nav');
console.log(nav);
var li = document.querySelector('li');
console.log(li);
// 3. querySelectorAll()返回指定选择器的所有元素对象集合
var allBox = document.querySelectorAll('.box');
console.log(allBox);
var lis = document.querySelectorAll('li');
console.log(lis);
</script>
</body>
2.2.3 获取特殊元素(body、html)
1.获取body
var bodyEle = document.body;//返回body元素对象
console.log(bodyEle);
2.获取html
var htmlEle = document.html;//错误
var htmlEle = document.documentElement;//正确,返回html元素对象
console.log(htmlEle);
3. 事件
3.1 事件概述
JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
简单理解: 触发— 响应机制。
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,我们可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。
3.2 事件的组成·
- 事件源:触发事件的元素
- 事件类型:例如 click 点击事件
- 事件处理程序:事件触发后要执行的代码(函数形式),事件处理函数
这三点也被称为事件三要素
<body>
<button id="btn">唐伯虎</button>
<script>
// 点击一个按钮,弹出对话框
// 1. 事件是有三部分组成 事件源 事件类型 事件处理程序 我们也称为事件三要素
//(1) 事件源 事件被触发的对象 谁 按钮
var btn = document.getElementById('btn');
//(2) 事件类型 如何触发 什么事件 比如鼠标点击(onclick) 还是鼠标经过 还是键盘按下
//(3) 事件处理程序 通过一个函数赋值的方式 完成
btn.onclick = function() {
alert('点秋香');
}
</script>
</body>
3.3 执行事件的步骤
- 获取事件源
- 注册事件(也叫做绑定事件)
- 添加事件处理程序
<body>
<div>123</div>
<script>
// 执行事件步骤
// 点击div 控制台输出 我被选中了
// 1. 获取事件源
var div = document.querySelector('div');
// 2.绑定事件 注册事件
// div.onclick
// 3.添加事件处理程序
div.onclick = function() {
console.log('我被选中了');
}
</script>
</body>
3.4 常见的鼠标事件
- onclick:鼠标点击左键触发
- onmouseover:鼠标经过出发
- onmouseout:鼠标离开触发
- onfocus:获得鼠标焦点触发
- onblur:失去鼠标焦点触发
- onmousemove:鼠标移动触发
- onmouseup:鼠标弹起触发
- onmousedown:鼠标按下触发
4. 操作元素
4.1 什么是操作元素
JavaScript的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容、属性等。(注意:这些操作都是通过元素对象的属性实现的)
4.2 改变元素内容
element.innerText
从起始位置到终止位置的内容,但是它会去除掉html标签,同时空格和换行也会去掉
element.innerHTML
起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行
改变元素内容:
<body>
<button>显示当前系统时间</button>
<div>某个时间</div>
<p>1123</p>
<script>
// 当我们点击了按钮, div里面的文字会发生变化
// 1. 获取元素
var btn = document.querySelector('button');
var div = document.querySelector('div');
// 2.注册事件
btn.onclick = function() {
div.innerHTML = getDate();
}
function getDate() {
var date = new Date();
// 以下是内置对象的知识点。在ECMA基础部分讲解
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
var day = date.getDay();
return '今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day];
}
</script>
</body>
innerText和innerHTML的区别
- 获取内容时的区别:
innerText会去除空格和换行,而innerHTML会保留空格和换行
- 设置内容时的区别:
innerText不会识别html,而innerHTML会识别
<body>
<div></div>
<p>
我是文字
<span>123</span>
</p>
<script>
// innerText 和 innerHTML的区别
// 1. innerText 不识别html标签 非标准 去除空格和换行
var div = document.querySelector('div');
// div.innerText = '<strong>今天是:</strong> 2022';
// 2. innerHTML 识别html标签 W3C标准 保留空格和换行的
div.innerHTML = '<strong>今天是:</strong> 2022';
// 这两个属性是可读写的 可以获取元素里面的内容
var p = document.querySelector('p');
console.log(p.innerText);
console.log(p.innerHTML);
</script>
</body>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79722.html