1、API和Web
Document Object Model(文档对象模型),就是把「文档」当做一个「对象」来看待。
相应的,Browser Object Model(浏览器对象模型),即把「浏览器」当做一个「对象」来看待。
API是浏览器提供的一套操作浏览器功能和页面元素的API( BOM和DOM)。
DOM:
DOM树:
●文档:一个页面就是- 个文档, DOM中使用document表示
●元素:页面中的所有标签都是元素, DOM中使用element表示
●节点:网页中的所有内容都是节点(标签、属性、文本、注释等) , DOM中使用node表示
DOM把以上内容都看做是对象
DOM在实际开发中主要用来操作元素。
2、获取页面中的元素
获取页面中的元素可以使用以下几种方式:
<div id="time">2020-12-25</div> //定义元素
(1)根据ID获取
var timer = document.getElementById(\'time\'); //获取到的是整个元素标签
console.log(typeof timer); //结果是object 说明返回的是个元素对象
1.因为文档页面从上往下加载,所以先得有标签所以script写到标签的下面
2. getElementById:get 获得,element 元素,by通过,驼峰命名法
3.参数id是大小写敏感的字符串
4.返回的是个元素对象
5. console.dir 打印返回的元素对象更好的查看里面的属性和方法
console.dir(timer); //可以查看元素属性和方法
(2)根据标签名获取(易重复 一般采用ID获取)
1.返回的是获取过来元素对象的集合以伪数组的形式存储的 使用getElementsByTagName0方法可以返回带有指定标签名的对象的集合。
var lis = document.getElementsByTagName(\'li\');
console.log(lis); //得到4个‘li’,伪数组
console.log(lis[0]); //按照索引获取为数组中元素
2.想要依次打印里面的元素对象可以采取遍历的方式
for (var i = 0; i < lis.length; i++){
console.log(lis[i]);
}
3.如果页面中只有一个li返回的还是伪数组的形式
4.如果页面中没有这个元素返回的是空的伪数组的形式
注意:
1.因为得到的是一 个对象的集合,所以想要操作里面的元素就需要遍历。
2.得到元素对象是动态的
(3)通过HTML5新增的方法获取
h5是浏览器i9以上的才支持 678不支持
1. getElementsByClassName 根据类名获得某些元素集合
var boxs = document.getElementsByClassName(\'box\');
2. querySelector 返回指定选择器的第一个元素对象切记 里面的选择器需要加符号
var firstBox = document.querySelectoe(\'.box\'); //为类时需加‘.’
console.log(firstBox);
var nav =document.querySelector(\'nav\'); //为id时需加‘’
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(\'i\');
console.log(lis);
(4)特殊元素获取
var bodyEle = document.body; // 1.获取body元素
console.log(bodyEle);
console.dir(bodyEle);
// var htmlEle= document.html; // 2.获取html元素
var htmlEle = document.documentElement;
console.log(htmlEle);
3、事件基础
1.事件概述
JavaScript 使有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。
简单理解: 触发--- 响应机制。
网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,可以在用户点击某按钮时产生一个 事件,然后去执行某些操作。
2.事件三要素
1. 事件源 (谁)
2. 事件类型 (什么事件)
3. 事件处理程序 (做啥)
点击一个按钮,弹出对话框
1.事件是有三部分组成 事件源 事件类型 事件处理程序,也称为事件三要素
(1) 事件源事件被触发的对象 谁 按钮
(2) 事件类型 如何触发什么事件比如鼠标点击(onclick) 还是鼠标经过还是键盘按下
(3) 事件处理程序 通过一个函数赋值的方式完成
var btn = document.getElementById(\'btn\'); //事件源事件被触发的对象 谁 按钮
btn.onclick = function(){ // 事件处理程序 通过一个函数赋值的方式完成
alert(\'点\');
}
3.执行事件步骤
点击div控制台输出我被选中了
1.获取事件源
var div = document.querySelector(\'div\'); //获取事件源
2.注册事件(绑定事件注册事件)
div.onclick //注册事件(绑定事件注册事件)
3.添加事件处理程序;(采取函数赋值形式)
div.onclick = function(){
console.log(\'我被选中了\');
4.常见的鼠标事件
鼠标事件 触发条件
onclick 鼠标点击左键触发
onmouseover 鼠标经过触发
onmouseout 鼠标离开触发
onfocus 获得鼠标焦点触发
onblur 失去鼠标焦点触发
onmousemove 鼠标移动触发
onmouseup 鼠标弹起触发
onmousedown 鼠标按下触发
4、操作元素
4.1改变元素内容
1)element.innerText 从起始位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉
2)element. innerHTML 起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行
当点击了按钮,div里面的文字会发生变化
1.获取元素
var btn =document.querySelector(\'button\');
var div =document.querySelector(\'div\');
2.注册事件
btn.onclick = function(){
div.innerText = \'2020-12-25\'; //显示时间
div.innerText = getDate(){
}
}
function getDate(){
var date = new Date();
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];
}
元素可以不用添加事件,即操作元素
var p = document.querySelector(\'p\'); //获取元素
p.innerText = getDate(); //操作元素
</script>
</body>
4.2常用元素操作
1. innerText、innerHTML 改变元素内容
2. src、href
3. id、alt、title
innerText和innerHTML 的区别
1.innerText不识别html标签非标准去除空 格和换行
2.innerHTML识别html标签 W3C标准 保审空格和换行的(常用)
操作图片属性
<button id="ldh">1</button>
<button id="ldh">2</button>
<img>需要跟改的图片</img>
添加title属性之后 控制title在处理程序中变动例
<img src = "images/ldh.jpg" alt = "" title = "1">
制作按钮 控制事件
<script>
//修改元素属性 src
//1.获取元素
var ldh = document.getElementById(\'ldh\');
var zxy = document.getElementById(\'zxy\');
var img = document.querySelector(\'img\');
//2.注册事件处理程序
应用 不同时间不同图片和问候语
//定义一个图片标签和 问候语标签
<img src = \'images/s.gif\' alt = \'\'>
<div>上午好</div>
根据系统不同时间来判断,所以需要用到日期内置对象
利用多分支语句来设置不同的图片
需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性
需要一个div元素,显示不同问候语,修改元素内容即可
//1.获取元素
var img = document.querySelector(\'img\');
var div = document.querySelector(\'div\');
//2.得到当前的小时数
var date = new Date();
var h = date.getHours();
//3.判断小时数改变图片和文字信息
if (h < 12) {
img.src = \'images/s.gif\';
div.innerHTML = \'上午好。\';
}else if (h < 18){
img.src = \'image/x.gif\';
div.innerHTML = \'下午好。\';
}else {
img.src = \'images/w.gif\';
div.innerHTML = \'晚上好。\';
}
4.3常见表单操作
利用 DOM 可以操作如下表单元素的属性: type、value、checked、selected、disabled
操作表单属性设置
<button>按钮</button>
<input type = "text" value = "输入内容">
<script>
//1.获取元素
var btn = document.querySelector(\'button\');
var input = document.querySelector(\'input\');
btn.onclick = function () {
input.value = \'点到我了\';
//input. innerHTML = \' 点击了\';这个是 普通盒子比如div标签里面表单里面的值文字内容是通过
value来修改的
this.disabled = true;
}
//用disabled禁用 即点过一次就不能再点了 调用disabled时用input或this都可以
4.4样式属性操作
可以通过JS修改元素的大小、颜色、位置等样式。
1. element. style行内样式操作
2. element. className类名样式操作
注意:
1.JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor
2.JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高
注意:
1.如果样式修改较多,可以采取操作类名方式更改元素样式。
2. class因为是个保留字,因此使用className来操作元素类名属性
3. className 会直接更改元素的类名。会覆盖原先的类名。
显示隐藏文本框字
①首先表单需要2个新事件,获得焦点onfocus失去焦点onblur
②如果获得焦点,判断表单里面内容是否为默认文字,如果是默认文字,就清空表单内容
③如果失去焦点,判断表单内容是否为空,如果为空,则表单内容改为默认文字
注意:
1.如果样式修改较多,可以采取操作类名方式更改元素样式。
2. class因为是个保留字,因此使用className来操作元素类名属性
3. className 会直接更改元素的类名.会覆盖原先的类名。
3.
如果想要保留原先的类名,可以这么做多类名选择器
this.className =\'first change\';
4.5 排他思想
如果有同一组元素,想要某一个元素实现某种样式, 需要用到循环的排他思想算法:
1. 所有元素全部清除样式(干掉其他人)
2. 给当前元素设置样式 (留下我自己)
3. 注意顺序不能颠倒,首先干掉其他人,再设置自己
4.6 自定义属性的操作
1. 获取属性值
element.属性 获取属性值。
element.getAttribute(\'属性\');
区别:
element.属性 获取内置属性值(元素本身自带的属性)
element.getAttribute(‘属性’); 主要获得自定义的属性 (标准)
2. 设置属性值
element.属性 = ‘值’ 设置内置属性值。
element.setAttribute(\'属性\', \'值\');
区别:
element.属性 设置内置属性值
element.setAttribute(‘属性’); 主要设置自定义的属性 (标准)
3. 移除属性
element.removeAttribute(\'属性\');
4.7 H5自定义属性
自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。
自定义属性获取是通过getAttribute(‘属性’) 获取。
但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性。
H5新增了自定义属性:
1. 设置H5自定义属性
H5规定自定义属性data-开头做为属性名并且赋值。
比如 <div data-index=“1”></div>
或者使用 JS 设置
element.setAttribute(‘data-index’, 2)
2. 获取H5自定义属性
兼容性获取 element.getAttribute(‘data-index’);
H5新增 element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持
相关文章: