01 web:网页
api:接口,其实就是别人封装好的一套方法(函数),用来实现对应的功能,我们不用管它这个方法里面是怎么写的,只要调用就能实现对应的功能。
webAPI:一套用来操作网页的方法和函数
-->
02根据id来找到网页元素
<h3 id="title">我是标题3</h3>
<div id="box">我是div</div>
<script>
// 它会去找网页里id名叫title的元素,找到以后会当返回值返回
var title = document.getElementById('title');
console.log(title);
var box = document.getElementById('box');
console.log(box);
03为什么script标签写在body快结束的位置
<!--
js如果写在head里就找不到元素
规范写法:写在/body前面,也就是body结束位置的前面
-->
</head>
<body>
<div id="box">我是div</div>
<script>
// 1.如果找不到,这个方法会返回null
// 2.如果JS代码写在head里,找不到元素
var box = document.getElementById('box');
console.log(box);
04添加点击事件
点击事件:代表要等点击才会触发代码
写法:
元素.onclick = function(){
点击要触发的代码
}
这个函数可以是匿名也可以是已经声明过的函数,但是如果是声明过的函数,记得赋值时,不要加括号
-->
</head>
<body>
<input type="button" value="点我啊" id="btn">
<input type="button" value="点我2" id="btn2">
<script>
// 找到按钮
var btn = document.getElementById('btn');
// 添加点击事件
// 当btn被点击的时候会来调用这个函数的函数体
// btn.onclick = function(){
// alert(123);
// }
function test(){
alert(123);
}
// 点击事件给的函数,也可以是已经存在的函数
// 但是千万不要加括号
// btn.onclick = test(); //错误的(点击后才发生,不是没有点击就发生)
btn.onclick = test; //正确的
05点击按钮改掉所有p标签文字
<!--
伪(类)数组:有下标有元素有长度可以被遍历,但是没有数组的那些方法,这种叫伪数组
document.getElementsByTagName
根据标签获取元素,获得是一个伪数组
元素.innerText
修改双标签里面的文字
-->
</head>
<body>
<input type="button" value="修改文字" id="btn">
<p>我是p标签1</p>
<p>我是p标签2</p>
<p>我是p标签3</p>
<p>我是p标签4</p>
<p>我是p标签5</p>
<p>我是p标签6</p>
<p>我是p标签7</p>
<p>我是p标签8</p>
<p>我是p标签9</p>
<p>我是p标签10</p>
<script>
//找到按钮
var btn = document.getElementById('btn');
// 找到所有p标签(根据标签名找元素)
// 找到所有的p标签,返回值是一个伪数组
var pList = document.getElementsByTagName('p');
// console.log(pList);
// pList.push(190);
//给按钮加点击事件
btn.onclick = function(){
for(var i = 0; i < pList.length; i++){
// console.log(pList[i]);
// innerText修改双标签里面的文字
pList[i].innerText = '我修改了';
}
}
06换图片
<!-- 我们在webAPI里会把每个元素当做对象来处理 -->
</head>
<body>
<input type="button" value="换图片" id="btn">
<hr>
<img id="icon" src="images/xk.png" alt="">
<script>
// 找到按钮
var btn = document.getElementById('btn');
// 找到img
var icon = document.getElementById('icon');
// 给按钮加点击事件
btn.onclick = function(){
//修改img的src
icon.src = 'images/wm.png';
}
07用js操作类ming
<!--
className : 获取类名
className 也可以重新赋值
如果用 += 代表添加一个类,但是记得类前面要加空格
如果要 删除一个类,就要给它重新赋值,赋值的时候,少掉那一个要删的类就行了
-->
<style>
.box{
width: 100px;
height: 100px;
}
.border{
border: 1px solid #000;
}
.green{
background-color: green;
}
</style>
</head>
<body>
<input type="button" value="获取类名" id="btn1">
<input type="button" value="添加一个类变绿" id="btn2">
<input type="button" value="删掉一个类清掉绿色" id="btn3">
<div id="box" class="box border"></div>
<script>
// 找到div
var box = document.getElementById('box');
//找到按钮,给它加点击事件
document.getElementById('btn1').onclick = function(){
// 获取div的类
console.log(box.className);
}
//找到第二个按钮,给它加点击事件
document.getElementById('btn2').onclick = function(){
// 给div加一个类
// box.className = "box border green";
// 添加一个类,记得添加类的时候前面要加空格
box.className += " green";
}
// 找到第三个按钮,加点击事件
document.getElementById('btn3').onclick = function(){
// 所有的-都是当数字来运算
// box.className -= " green"; //相当于 box.className = box.className - " green";
box.className = "box border";
};
08显示与隐藏的案例
<!--
找到元素的方法:
document.getElementById
document.getElementsByTagName
document.getElementsByClassName
-->
<style>
.box{
width: 100px;
height: 100px;
background-color: #f00;
}
.hide{
display: none;
}
</style>
</head>
<body>
<input type="button" value="显示" id="show">
<input type="button" value="隐藏" id="hide">
<div class="box"></div>
<script>
// 根据类名获取元素,它返回的也是伪数组
var res = document.getElementsByClassName('box')[0];
console.log(res);
// 隐藏按钮的点击事件
document.getElementById('hide').onclick = function(){
//给div加一个类hide
res.className += ' hide';
};
// 显示按钮的点击事件
document.getElementById('show').onclick = function(){
res.className = "box";
}
09一个按钮做显示与隐藏
<style>
.box {
width: 100px;
height: 100px;
background-color: #f00;
}
.hide {
display: none;
}
</style>
</head>
<body>
<input type="button" value="隐藏" id="btn">
<div class="box"></div>
<script>
// 找按钮
var btn = document.getElementById('btn');
// 找div
var box = document.getElementsByClassName('box')[0];
// 给按钮加点击事件
btn.onclick = function () {
if (btn.value == "隐藏") {
// 隐藏div
box.className += ' hide';
// 修改按钮文字变显示
btn.value = "显示";
} else {
// 显示div
box.className = "box";
// 修改按钮文字变隐藏
btn.value = "隐藏";
}
}
10隔行变色
<style>
.green{
background-color: yellowgreen;
}
.hotpink{
background-color: hotpink;
}
</style>
</head>
<body>
<ul>
<li>隔壁老王1</li>
<li>隔壁老王2</li>
<li>隔壁老王3</li>
<li>隔壁老王4</li>
<li>隔壁老王5</li>
<li>隔壁老王6</li>
<li>隔壁老王7</li>
<li>隔壁老王8</li>
<li>隔壁老王9</li>
<li>隔壁老王10</li>
</ul>
<script>
// 找到所有的li
var liList = document.getElementsByTagName('li');
// console.log(liList);
for(var i = 0; i < liList.length; i++){
if( i % 2 == 0)
liList[i].className = "green";
else
liList[i].className = "hotpink";
}
11省略大括号的问题
<!--
如果if和else语句块里的语句只有一句话,那么大括号可以省略
if(条件)
1句话
else
1句话
if和循环语句,如果语句块里只有1句话,那么大括号可以省略,但是函数,无论如何不能省略大括号
-->
<script>
// var age = 19;
// if( age >= 18 )
// alert('成年了,可以进网吧了');
// else
// alert('未成年,滚出');
// alert('哈哈哈哈哈啊');
// for(var i = 0; i < 5; i++)
// alert(i);
// alert('结束了');
function test(){
alert(123);
}
test();
12用js直接修改样式
在JS里要修改样式,都是操作style属性
元素.style.样式属性名 = 值;
例:
元素.style.width = "300px";
注意:css属性怎么写,JS还是怎么写,但是如果css里的属性名有-,那么要把-去掉,并且-后面首字母大写
例:
元素.style.backgroundColor = "red";
-->
<style>
.box {
width: 100px;
height: 100px;
border: 1px solid black;
}
</style>
</head>
<body>
<input type="button" value="添加背景颜色" id="btn1">
<input type="button" value="宽高都到300" id="btn2">
<input type="button" value="修改透明度" id="btn3">
<input type="button" value="修改上间距" id="btn4">
<div class="box"></div>
<script>
//找到按钮
var btn = document.getElementById('btn1');
//找到div
var box = document.getElementsByClassName('box')[0];
//按钮的点击事件
btn.onclick = function(){
// console.log(box.style);
// 在JS里,会把-去掉,然后把-后面的首字母大写
box.style.backgroundColor = "red";
}
// 变宽变高的点击事件
document.getElementById('btn2').onclick = function(){
box.style.width = "300px";
box.style.height = "300px";
}
// 修改透明度
document.getElementById('btn3').onclick = function(){
box.style.opacity = 0.3;
}
// 修改上间距
document.getElementById('btn4').onclick = function(){
box.style.marginTop = "150px";
}
13显示和隐藏二维码
<!--
鼠标移入事件:onmouseover
移入才触发
鼠标移出事件:onmouseout
移出才触发
-->
<style>
.small{
width: 50px;
height: 50px;
background:url(images/bgs.png) no-repeat -159px -51px;
position: fixed;
right:0;
top:50%;
margin-top: -25px;
}
#big{
width: 210px;
position: absolute;
left: -210px;
display: none;
}
</style>
</head>
<body>
<div class="small">
<img id="big" src="images/hmewm.jpg" alt="">
</div>
<script>
// 找到小图
var small = document.getElementsByClassName('small')[0];
// 找到大图
var big = document.getElementById('big');
// 鼠标移入事件
small.onmouseover = function(){
big.style.display = "block";
}
// 鼠标移出事件
small.onmouseout = function(){
big.style.display = "none";
}
14事件里的this
<!--
之前学的JS里的this:谁调用方法,方法里的this就是谁
如果是直接调用函数,前面没有加任何前缀,那么this是window
-->
<style>
.box{
width: 100px;
height: 100px;
background-color: #f00;;
}
</style>
<script>
// 复习JS部分
// function f1(){
// console.log(this);
// }
// var obj1 = { name:"jack" };
// var obj2 = { name:"rose" };
// obj1.test = f1;
// obj1.test();
// obj2.test = f1;
// obj2.test();
// f1();//window
</script>
</head>
<body>
<input type="button" value="点我啊" id="btn">
<div class="box"></div>
<script>
// webAPI的事件里this:谁触发事件,事件里的this就是谁
//找到btn
var btn = document.getElementById('btn');
btn.onclick = function(){
console.log(this);
}
// 找到div
var box = document.getElementsByClassName('box')[0];
box.onclick = function(){
console.log(this);
}
15隔行变色与移入变色
<ul>
<li>隔壁老王1</li>
<li>隔壁老王2</li>
<li>隔壁老王3</li>
<li>隔壁老王4</li>
<li>隔壁老王5</li>
<li>隔壁老王6</li>
<li>隔壁老王7</li>
<li>隔壁老王8</li>
<li>隔壁老王9</li>
<li>隔壁老王10</li>
</ul>
<script>
// 变量声明到外面才能访问,这个变量用来保存原来的颜色
var oldColor;
// 找到所有的li
var liList = document.getElementsByTagName('li');
// 遍历所有的li
for (var i = 0; i < liList.length; i++) {
// console.log(liList[i]);
// 偶数行一个颜色,奇数行一个颜色
if (i % 2 == 0)
liList[i].style.backgroundColor = "yellowgreen";
else
liList[i].style.backgroundColor = "hotpink";
// 给每个li加鼠标移入事件
liList[i].onmouseover = function () {
// 把它原本的颜色存起来
oldColor = this.style.backgroundColor;
// 谁移入this就是谁
// 谁移入就把谁背景颜色变红
this.style.backgroundColor = "red";
}
// 给每个li加鼠标移出事件
liList[i].onmouseout = function () {
// 谁移出,谁的背景颜色就恢复
this.style.backgroundColor = oldColor;
}
}
16禁用和启用表单元素
<!--
如果加了disabled那么就代表禁用,它不用给属性值,只要加上就有效果,不加就没有效果
像这样不用给属性值,只要写上就有效果的属性还有:
checked
selected
-->
<input type="text">
<input type="password">
<input type="checkbox">
<input type="button" value="按钮">
<input type="radio">
<hr>
<button id="btn1">禁用</button>
<button id="btn2">启用</button>
<script>
// 找到所有的表单元素
var list = document.getElementsByTagName('input');
// console.log(list);
// 禁用的点击事件
document.getElementById('btn1').onclick = function () {
// 要把所有表单元素都禁用,所以要遍历
for (var i = 0; i < list.length; i++) {
// true是代表让它有一个disabled属性
list[i].disabled = true;
}
}
// 启用的点击事件
document.getElementById('btn2').onclick = function () {
// 要把所有表单元素都禁用,所以要遍历
for (var i = 0; i < list.length; i++) {
// false是代表让它没有disabled属性
list[i].disabled = false;
}
}
17一个元素禁用和启用
<!--
如果加了disabled那么就代表禁用,它不用给属性值,只要加上就有效果,不加就没有效果
像这样不用给属性值,只要写上就有效果的属性还有:
checked
selected
-->
<input type="text">
<input type="password">
<input type="checkbox">
<input type="button" value="按钮">
<input type="radio">
<hr>
<button id="btn1">禁用</button>
<script>
// 找到所有的表单元素
var list = document.getElementsByTagName('input');
// 点击事件
document.getElementById('btn1').onclick = function () {
// 如果按钮文字是禁用
// if (this.innerText == "禁用") {
// //遍历元素
// for (var i = 0; i < list.length; i++) {
// // 让所有表单disabled为true
// list[i].disabled = true;
// }
// //改完后按钮文字变启用
// this.innerText = "启用";
// } else {
// //else里做相反的事就行了
// for (var i = 0; i < list.length; i++) {
// list[i].disabled = false;
// }
// this.innerText = "禁用";
// }
for (var i = 0; i < list.length; i++) {
// 如果文字等于禁用才给true,否则给false
// ==的结果本来就是true或false
list[i].disabled = this.innerText == '禁用';
}
// 它们先算的是右边得到一个结果,要么是禁用要么是启用,然后重新赋值给按钮
// 如果原来是禁用,就会重新赋值为启用,如果原来是启用,就会重新赋值为禁用
this.innerText = this.innerText == "禁用" ? "启用" : "禁用";
18总结找元素的方法和总结
<!--
document.getElementById
直接返回元素对象,找不到返回null
下面这些方法:无论如何返回的一定都是伪数组,找到几个就返回长度为几的伪数组
document.getElementsByTagName:根据标签名来找
document.getElementsByClassName:根据类名来找,有兼容问题,IE8和之前的浏览器不支持
document.getElementsByName: 根据name属性来找,在新浏览器里所有元素都能找到,但是在IE8里只能找到表单元素
-->
</head>
<body>
<!-- <div id="test" class="box">我是div1</div> -->
<!-- <div class="box"></div> -->
<form action="#">(提交的地址,#默认提交到本地)
<!-- 表单里的内容要想被提交必须有name属性 -->
<!-- <input type="text" placeholder="请输入姓名" name="chk">
<input type="text" placeholder="请输入年龄" name="chk"> -->
男<input type="radio" name="sex">
女<input type="radio" name="sex">
蔡徐坤<input type="radio" name="sex">
<input type="submit">
</form>
<div name="sex"></div>
<script>
// var res = document.getElementById('test');
// console.log(res); //返回的这个div对象
//
// var res = document.getElementsByTagName('div');
// console.log(res);
var res = document.getElementsByClassName('box');
console.log(res);
// var res = document.getElementsByName('sex');
// console.log(res);