获取与操作元素
1.getElementById
<body>
<div id="time">2022-05-14</div>
<script>
//1.因为文档页面从上往下加载,所以先有标签,所以script写到标签的下面
//2.get获得element 元素 by 通过 驼峰命名法
//3.参数 id是大小写敏感的字符串
//4.返回的是一个元素对象
var timer = document.getElementById('time');
console.log(timer);
console.log(typeof timer);//object
//5.console.dir 打印返回的元素对象 更好的查看里面的属性和方法
console.dir(timer);
</script>
</body>
2.getElementsByTagName获取某些元素
<body>
<ul>
<li>史蒂夫1</li>
<li>史蒂夫2</li>
<li>史蒂夫3</li>
<li>史蒂夫4</li>
<li>史蒂夫5</li>
</ul>
<ol id="ol">
<li>文具店</li>
<li>文具店</li>
<li>文具店</li>
<li>文具店</li>
</ol>
<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.如果页面中只有一个li 返回的还是伪数组的形式
//4.没有li 返回空的伪数组的形式
//5.element.getElementsByTagName('标签名');
/* var ol = document.getElementsByTagName('ol');//[ol]
console.log(ol[0].getElementsByTagName('li')); */
var ol = document.getElementById('ol');
console.log(ol.getElementsByTagName('li'));
</script>
</body>
3.H5新增获取元素方式
<body>
<div class="box">盒子</div>
<div class = "box">盒子</div>
<div id="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
//1.getElementsByClassName 根据类名获得某些元素集合
var boxs = document.getElementsByClassName('box');
console.log(boxs);
//2.querySelector 返回指定选择器的第一个元素对象 切记 里面的选择器需要加符号 .div #nav
//类加. id加#
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>
4.获取特殊元素
<script>
//1.获取body元素
var bodyEle = document.body;
console.log(bodyEle);
console.dir(bodyEle);
// 2.获取html元素
var htmlEle = document.documentElement;
console.log(htmlEle);
</script>
5.事件三要素
<body>
<button id="btn">堂博士</button>
<script>
//点击一个按钮,弹出对话框
//1.事件是有三部分组成 事件源 事件类型 事件处理程序 我们也称为事件三要素
//(1) 事件源 事件被触发的对象 按钮
var btn = document.getElementById('btn');
//(2) 事件类型 如何触发 什么事件 比如鼠标点击 还是鼠标经过 还是鼠标按下
//(3) 事件处理程序 通过一个函数赋值的方式 完成
btn.onclick = function(){
alert('学知识');
}
</script>
</body>
6.执行事件步骤
<body>
<div>123</div>
<script>
//执行事件步骤
//点击div 控制台输出 我被选中了
//1.获取事件源
var div = document.querySelector('div');
//2.绑定事件 注册事件
//div.onclick
//3.添加事件处理程序
div.onclick = function(){
console.log('我被选中了');
}
</script>
</body>
7.操作元素之改变元素的内容
<body>
<button>显示当前系统的时间</button>
<div>某个时间</div>
<p>123</p>
<script>
//当我们点击了按钮 div里面的文字会发生变化
//1.获取元素
var btn = document.querySelector('button');
var div = document.querySelector('div');
//2.注册事件
btn.onclick = function(){
//div.innerText = '2022-5-14';
div.innerText = getDate();
}
function getDate(){
//格式化日期 年月日
var date = new Date();
//2022年5月2日 星期一
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>
8.innerText 和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>
9.操作元素之修改元素属性
<body>
<button id = 'girl'>女孩</button>
<button id = 'sun'>太阳</button>
<img src="images/1.jpg" alt="">
<script>
//修改元素属性 src
//1.获取元素
var girl = document.getElementById('girl');
var sun = document.getElementById('sun');
var img = document.querySelector('img');
//2.注册事件 处理程序
sun.onclick = function(){
img.src = 'images/2.jpg';
img.title = '太阳';
}
girl.onclick = function(){
img.src = 'images/1.jpg';
img.title = '女孩'
}
</script>
</body>
10.分时间显示图片并分时问候的案例
<body>
<!-- <img src="images/2.jpg" alt=""> -->
<div>上午好</div>
<script>
//根据系统不同的时间来判断,所有需要用到日期内置对象
//利用分支语句来设置不同的图片
//需要一个图片,并且根据时间修改图片,就需要用到操作元素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/2.jpg';
div.innerHTML = '上午好';
}else if(h < 18){
img.src = 'images/1.jpg';
div.innerHTML = '下午好';
}else{
img.src = 'images/2.jpg';
div.innerHTML = '晚上好';
}
</script>
</body>
11.操作元素之表单属性设置
<body>
<button>按钮</button>
<input type="text" value="输入内容">
<script>
//1.获取元素
var btn = document.querySelector('button');
var input = document.querySelector('input');
//2.注册事件
btn.onclick = function () {
//input.innerHTML = '点击了'; 这个是 普通盒子 比如 div 标签里面的内容
//表单里面的值 文字内容是通过value来修改的
input.value = '被点击了';
/* input.type = "xxx";
input.checked = "xxx";
input.selected = true / false;
input.disabled = true / false; */
//如果想要某个表单被禁用 不能再点击disabled 我们想要这个按钮 button禁用
//btn.disabled = true;
this.disabled = true;
//this指向事件函数的调用者 btn
}
</script>
</body>
12.仿京东显示、隐藏密码
<!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.0">
<title>Document</title>
<style>
.box {
position: relative;
width: 400px;
border-bottom: 1px solid #ccc;
margin: 100px auto;
}
.box input {
width: 370px;
height: 30px;
border: 0;
outline: 1px;
}
.box img {
position: absolute;
width: 24px;
top: 10px;
right: 20px;
}
</style>
</head>
<body>
<div class="box">
<label for="">
<img src="images/close.png" alt="" id="eye">
</label>
<input type="password" name="" id="pwd">
</div>
<script>
//1.获取元素
var eye = document.getElementById('eye');
var pwd = document.getElementById('pwd');
//2.注册事件 处理程序
var flag = 0;
eye.onclick = function () {
if (flag == 0) {
pwd.type = 'text';
eye.src = 'images/open.png';
flag = 1;//赋值操作
}else {
pwd.type = 'password';
eye.src = 'images/close.png';
flag = 0;
}
}
</script>
</body>
</html>
13.操作元素之修改样式属性
<!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.0">
<title>Document</title>
<style>
div{
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div></div>
<script>
//1.获取元素
var div = document.querySelector('div');
//2.注册事件 处理程序
div.onclick = function(){
//div.style里面的属性 采取驼峰命名法
//js修改style样式操作,产生的是行内样式,css权重比较高
this.style.backgroundColor = 'purple';
this.style.width = '250px';
}
</script>
</body>
</html>
14.关闭淘宝二维码案例
<!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.0">
<title>Document</title>
<style>
.box{
position: relative;
width: 74px;
height: 88px;
border: 1px solid #ccc;
margin: 100px auto;
font-size: 14px;
text-align: center;
color:brown;
display: block;
}
.box img{
width: 100px;
height: 70px;
margin-top: 5px;
}
.close-btn{
position: absolute;
top: -1px;
left: -16px;
width:14px;
height: 14px;
border: 1px solid #ccc;
line-height: Arial,Helvetica, sans-serif;
cursor:pointer;
}
</style>
</head>
<body>
<div class="box">
淘宝二维码
<img src="images/1.jpg" alt="">
<i class="close-btn">x</i>
</div>
<script>
//1.获取元素
var btn = document.querySelector('.close-btn');
var box = document.querySelector('.box');
//2.注册事件 程序处理
btn.onclick = function(){
box.style.display = 'none';
}
</script>
</body>
</html>
15.循环精灵图
<!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.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
/* 取消li标签前面的圆点 */
.box {
width: 250px;
margin: 100px auto;
}
.box li {
float: left;
width: 24px;
height: 24px;
background-color: pink;
margin: 15px;
background: url(images/sprite.png) no-repeat;
}
</style>
</head>
<body>
<div class="box">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<script>
//1.获取元素 所有的小li
var lis = document.querySelectorAll('li');
for (var i = 0; i < lis.length; i++) {
//让索引号 乘以 44 就是每个li的背景y坐标 index 就是y坐标
var index = i * 44
lis[i].style.backgroundPosition = '0 -'+index+'px';
}
</script>
</body>
</html>
16.显示隐藏文本框内容
<!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.0">
<title>Document</title>
<style>
input{
color: #999;
}
</style>
</head>
<body>
<input type="text" value="手机">
<script>
//1.获取元素
var text = document.querySelector('input');
//2.注册事件 获得焦点事件 onfocus
text.onfocus = function(){
//console.log('得到了焦点');
//this.value:可以得到this的值 this:不可以得到值
if(this.value === '手机'){
this.value = '';
}
//获得焦点需要把文本框里面的文字颜色变黑
this.style.color = '#333';
}
//3.注册事件 失去焦点事件 onblur
text.onblur = function(){
//console.log('失去了焦点');
if(this.value === ''){
this.value = '手机';
}
//失去焦点需要把文本框里面的文字颜色变浅
this.style.color = '#999';
}
</script>
</body>
</html>
17.通过className更改元素样式
<!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.0">
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: pink;
}
.change {
background-color: purple;
color: #fff;
font-size: 25px;
margin-top: 100px;
}
</style>
</head>
<body>
<div>文本</div>
<script>
//1.使用element.style(行类样式操作)获得修改元素样式 如果样式较少 或者 功能简单的情况下使用
// 使用element.className(类名样式操作) 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况
var test = document.querySelector('div');
//2.注册事件 处理程序
test.onclick = function(){
/* this.style.backgroundColor = 'purple';
this.style.width = '250px';//color fontSize marginTop... */
//让我们当前元素的类名改为了change
//3.className 会直接更改元素的类名,会覆盖原先的类名
//如果想要保留原先的类名,,我们可以:多类选择器
this.className = 'change';
}
</script>
</body>
</html>
18. 仿新浪注册页面
<!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.0">
<title>Document</title>
<style>
div {
width: 600px;
margin: 100px auto;
}
.message {
display: inline-block;
font-size: 12px;
color: #999;
background: url(images/mess.png) no-repeat left center;
padding-left: 20px;
}
.wrong {
color: red;
background-image: url(images/wrong.png);
}
.right {
color: green;
background-image: url(images/right.png);
}
</style>
</head>
<body>
<div class="register">
<input type="password" class="ipt">
<p class="message">请输入6~16位密码</p>
</div>
<script>
// 首先判断的事件是表单失去焦点 onblur
// 如果输入正确则提示正确的信息颜色为绿色小图标变化
// 如果输入不是6到16位,则提示错误信息颜色为红色 小图标变化
// 因为里面变化样式较多,我们采取className修改样式
// 1.获取元素
var ipt = document.querySelector('.ipt');
var message = document.querySelector('.message');
// 2.注册事件 失去焦点
ipt.onblur = function(){
//根据表单里面值的长度 ipt.value.length
if(this.value.length < 6 || this.value.length > 16){
//console.log('错误');
message.className = 'message wrong'
message.innerHTML = '您输入的位数不对,6-16位'
}else{
message.className = 'message right'
message.innerHTML = '您输入正确'
}
}
</script>
</body>
</html>
19.开关灯案例
<!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.0">
<title>Document</title>
</head>
<body>
<button id="btn">开关灯</button>
<script>
var btn = document.getElementById('btn');
var flag = 0;
btn.onclick = function(){
if(flag == 0){
document.body.style.backgroundColor = 'black';
flag = 1;
}else{
document.body.style.backgroundColor = '#fff';
flag = 0;
}
}
</script>
</body>
</html>