JavaScript基础语法

一、写js的方式

1.行内式

  1. <input type="button" value="唐伯虎" onclick="alert('秋香姐')">

2.内嵌式

  1. <script>
  2. alert('沙漠骆驼')
  3. </script>

3.外部引入试

  1. // 创建一个js文件如my.js,写入一条js语句
  2. alert('如果我是DJ,你会爱我吗?')
  3. // 然后在html文件中引入
  4. <script src="my.js"></script>

二、js的注释方式

  1. // 单行注释 // 单行注释
  2. /* 多行注释 */ //多行注释

三、js的输入输出语句

  1. // 这是一个输入框
  2. prompt('请输入你的年龄')
  3. //alert 弹出警示框 输出的 展示给用户的
  4. alert('计算的结果是')
  5. // console 控制台输出 给程序员测试用的
  6. console.log('我是程序员能看到的')

四、变量的使用

1.声明变量

  1. var age; //声明一个名称为age的变量
  • var 是一个 JS关键字,用来声明变量( variable 变量的意思 )。使用该关键字声明变量后,计算机会自动为变量分配 内存空间,不需要程序员管
  • age 是程序员定义的变量名,我们要通过变量名来访问内存中分配的空间

2.赋值

  1. age = 10; // 给 age 这个变量赋值为 10
  • = 用来把右边的值赋给左边的变量空间中 此处代表赋值的意思
  • 变量值是程序员保存到变量空间里的值

3.变量的初始化

  1. var age = 18; // 声明变量的同时给变量赋值

4.变量案例1 - 初始化变量并输出

  1. var myname = '卡卡西';
  2. var address = '火影村';
  3. var age = 30;
  4. var email = 'kaka@kaka.com';
  5. var gz = 2000;
  6. console.log(myname)
  7. console.log(address)
  8. console.log(age)
  9. console.log(email)
  10. console.log(gz)

5.变量案例2 -用户输入变量并输出

  1. // 1.用户输入用户名 存储到一个变量里
  2. var myname = prompt('请输入用户名');
  3. // 2.输出这个用户名
  4. alert("你的用户名是:" + myname)

6.更新变量

一个变量被重新复赋值后,它原有的值就会被覆盖,变量值将以最后一次赋的值为准.

  1. var age = 18;
  2. age = 81; // 最后的结果就是81因为18 被覆盖掉了

7.同时声明多个变量

同时声明多个变量时,只需要写一个 var,多个变量名之间使用英文逗号隔开。

  1. var age = 10, name = 'zs', sex = 2;

8.声明变量特殊情况

情况
var age;console.log(age); 只声明 不赋值 undefined
console.log(age) 不声明 不赋值 直接使用 报错
age = 10;console.log(age); 不声明 只赋值 10

9.变量的命名规范

  • 由字母(A-Za-z)、数字(0-9)、下划线(_)、美元符号( $ )组成,如:usrAge, num01, _name

  • 严格区分大小写。var app; 和 var App; 是两个变量

  • 不能 以数字开头。 18age 是错误的

  • 不能 是关键字、保留字。例如:var、for、while

  • 变量名必须有意义。 MMD BBD nl → age

  • 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。 myFirstName

  • 推荐翻译网站: 有道 爱词霸

10.两个变量的交换

  1. var temp;
  2. var red = '红';
  3. var green = '绿'
  4. console.log(red,green)
  5. temp = red;
  6. red = green;
  7. green = temp;
  8. console.log(red,green)

11.变量小结

  • 为什么需要变量?

    • 因为一些数据需要保存,所以需要变量
  • 变量是什么?

    • 变量就是一个容器,用来存放数据的。方便我们以后使用里面的数据
  • 变量的本质是什么?

    • 变量是内存里的一块空间,用来存储数据。
  • 变量怎么使用的?

    • 使用变量的时候,一定要声明变量,然后赋值
    • 声明变量本质是去内存申请空间。
  • 什么是变量的初始化?

    • 声明变量并赋值我们称之为变量的初始化
  • 变量命名规范有哪些?

    • 变量名尽量要规范,见名知意——驼峰命名法
  • 交换2个变量值的思路

    • 区分哪些变量名不合法
    • 学会交换2个变

四、数据类型

变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的 内存中。JavaScript 是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行过程中,类型会 被自动确定。

  1. var age = 10; // 这是一个数字型
  2. var areYouOk = '是的'; // 这是一个字符串

在代码运行时,变量的数据类型是由 JS引擎 根据 = 右边变量值的数据类型来判断 的,运行完毕之后, 变量就确定了数据类型。 JavaScript 拥有动态类型,同时也意味着相同的变量可用作不同的类型

  1. var x = 6; // x 为数字
  2. var x = "Bill"; // x 为字符串

1.简单数据类型

JavaScript - 图1

1.数字型

最常见的进制有二进制、八进制、十进制、十六进制。

  1. // 1.八进制数字序列范围:0~7
  2. var num1 = 07; // 对应十进制的7
  3. var num2 = 019; // 对应十进制的19
  4. var num3 = 08; // 对应十进制的8
  5. // 2.十六进制数字序列范围:0~9以及A~F
  6. var num = 0xA;
  • JavaScript中数值的最大和最小值
    1. alert(Number.MAX_VALUE); // 1.7976931348623157e+308
    2. alert(Number.MIN_VALUE); // 5e-324
  • 最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
  • 最小值:Number.MIN_VALUE,这个值为:5e-32
    • 数字型的三个特殊值
      1. alert(Infinity); // Infinity
      2. alert(-Infinity); // -Infinity
      3. alert(NaN); // NaN
  • Infinity ,代表无穷大,大于任何数值
  • -Infinity ,代表无穷小,小于任何数值
  • NaN ,Not a number,代表一个非数值
    • isNaN方法

      用来判断一个变量是否非数字类型

JavaScript - 图2

  1. var usrAge = 21;
  2. var isOk = isNaN(userAge);
  3. console.log(isNum); // false ,21 不是一个非数字
  4. var usrName = "andy";
  5. console.log(isNaN(userName)); // true ,"andy"是一个非数字

2.字符串类型String

字符串型可以是引号中的任意文本,其语法为 双引号 “” 和 单引号’’

  1. var strMsg = "我爱北京天安门~"; // 使用双引号表示字符串
  2. var strMsg2 = '我爱吃猪蹄~'; // 使用单引号表示字符串
  3. // 常见错误
  4. var strMsg3 = 我爱大肘子; // 报错,没使用引号,会被认为是js代码,但js没有这些语法
  • 因为 HTML 标签里面的属性使用的是双引号,JS 这里我们更推荐使用单引号。

1.字符串嵌套

JS 可以用单引号嵌套双引号 ,或者用双引号嵌套单引号 (外双内单,外单内双)

  1. var strMsg = '我是"高帅富"程序猿'; // 可以用''包含""
  2. var strMsg2 = "我是'高帅富'程序猿"; // 也可以用"" 包含'' // 常见错误
  3. var badQuotes = 'What on earth?"; // 报错,不能 单双引号搭

2.字符串转义字符

类似HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符。 转义符都是 \ 开头的,常用的转义符及其说明如下:

转义符 解释说明
\n 换行符,n是newline的意思
\\ 斜杠\
\‘ ‘单引号
\“ “双引号
\t tab缩进
\b 空格,b是blank的意思

3.字符串长度

字符串是由若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的 length 属性可以获取整个字符 串的长度。

  1. var strMsg = "我是帅气多金的程序猿!";
  2. alert(strMsg.length); // 显示 11

4.字符串拼接
  • 多个字符串之间可以使用 + 进行拼接,其拼接方式为 字符串 + 任何类型 = 拼接之后的新字符串
  • 拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串
  1. // 1.1 字符串 "相加"
  2. alert('hello' + ' ' + 'world'); // hello world
  3. //1.2 数值字符串 "相加"
  4. alert('100' + '100'); // 100100
  5. //1.3 数值字符串 + 数值
  6. alert('11' + 12); // 1112
  • + 号总结口诀:数值相加 ,字符相连

5.字符串拼接加强
  1. console.log('pink老师' + 18); // 只要有字符就会相连
  2. var age = 18;
  3. // console.log('pink老师age岁啦'); // 这样不行哦
  4. console.log('pink老师' + age); // pink老师18
  5. console.log('pink老师' + age + '岁啦'); // pink老师18岁啦
  • 我们经常会将字符串和变量来拼接,因为变量可以很方便地修改里面的值

  • 变量是不能添加引号的,因为加引号的变量会变成字符串

  • 如果变量两侧都有字符串拼接,口诀“引引加加 ”,删掉数字,变量写加中间

3.布尔类型

布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。 布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0

  1. console.log(true + 1); // 2
  2. console.log(false + 1); // 1

1.Undefined 和 Null

一个声明后没有被赋值的变量会有一个默认值 undefined ( 如果进行相连或者相加时,注意结果

  1. var variable;
  2. console.log(variable); // undefined
  3. console.log('你好' + variable); // 你好undefined
  4. console.log(11 + variable); // NaN
  5. console.log(true + variable); // NaN

一个声明变量给 null 值,里面存的值为空(学习对象时,我们继续研究null)

  1. var vari = null;
  2. console.log('你好' + vari); // 你好null
  3. console.log(11 + vari); // 11
  4. console.log(true + vari); // 1

4.获取变量数据类型

1.获取检测变量的数据类型

  1. var num = 18;
  2. console.log(typeof num) // 结果 number

不同类型的返回值

JavaScript - 图3

  1. var num = 10;
  2. console.log(typeof num); // number
  3. var str = '哈哈哈'
  4. console.log(typeof str); // string
  5. var bool = true;
  6. console.log(typeof bool); // boolean
  7. var vari = undefined;
  8. console.log(typeof vari); // undefined
  9. var timer = null;
  10. console.log(typeof timer); // object
  11. var age = prompt('请输入你的年龄:')
  12. console.log(age); // 18
  13. console.log(typeof age); // string

2.字面量

字面量是在源代码中一个固定值的表示法,通俗来说,就是字面量表示如何表达这个值。

  • 数字字面量:8, 9, 10

  • 字符串字面量:’黑马程序员’, “大前端”

  • 布尔字面量:true,false

5.数据类型转换

1.什么是数据类型转换

使用表单、prompt 获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算,而需要转换变 量的数据类型。通俗来说,就是把一种数据类型的变量转换成另外一种数据类型。

我们通常会实现3种方式的转换:

  • 转换为字符串类型
  • 转换为数字型
  • 转换为布尔型

2.转为字符串

JavaScript - 图4

  • oString() 和 String() 使用方式不一样。
  • 三种转换方式,我们更喜欢用第三种加号拼接字符串转换方式, 这一种方式也称之为隐式转换
  1. // 1.把数字型转换为字符串型 变量.toString()
  2. var num = 10;
  3. var str = num.toString();
  4. console.log(str); // 10
  5. console.log(typeof str); // string
  6. // 2.利用String()
  7. var str1 = String(num);
  8. console.log(str1); // 10
  9. console.log(typeof(str1)); // string

3.转换为数字型

JavaScript - 图5

  • parseInt 和 parseFloat 单词的大小写,这2个是重点
  • 隐式转换是我们在进行算数运算的时候,JS 自动转换了数据类型
  1. var age = prompt('请输入你的年龄:');
  2. console.log(age);
  3. console.log(typeof(age)); // string
  4. // 1.利用parseInt变量)将字符型转换成数字型,但是得到的是整数
  5. var num = parseInt(age);
  6. console.log(num);
  7. console.log(typeof(num)); // number
  8. console.log(parseInt(3.14)) // 3
  9. console.log(parseInt(3.94)) // 3,没有四色五入
  10. console.log(parseInt('120px')) // 120,会去掉px
  11. console.log(parseInt('rem120px')) // NaN
  12. // 2.利用parseFloat变量)将字符型转换成数字型,但是得到的是浮点数
  13. console.log(parseFloat(3)); // 3.14
  14. console.log(parseFloat(3.14)); // 3.14
  15. // 3.利用Number(变量)转换
  16. console.log(Number('123'));
  17. console.log(typeof(Number('123'))) // number
  18. // 4.利用算数运算 - * / 隐式转换
  19. console.log('12' - 0); // 12
  20. console.log(typeof('12'-0)); // number
  21. console.log('123' - '120'); // 3
  22. console.log(typeof(('123' - '120'))); // number

4.计算年龄案例

  1. var year = prompt('请输入的你出生年份:');
  2. var age = 2021 - year;
  3. alert('你今年的年龄为:' + age);

5.简单加法器

  1. var num1 = prompt('请输入第一个值:') - 0;
  2. var num2 = prompt('请输入第二个值:') - 0;
  3. alert('两个值的和为:' + (num1+num2)) ;

6.转换为布尔类型

JavaScript - 图6

  • 代表空、否定的值会被转换为 false ,如 ‘’、0、NaN、null、undefined
  • 其余值都会被转换为 true
  1. console.log(Boolean('')); // false
  2. console.log(Boolean(0)); // false
  3. console.log(Boolean(NaN)); // false
  4. console.log(Boolean(null)); // false
  5. console.log(Boolean(undefined)); // false
  6. console.log(Boolean('小白')); // true
  7. console.log(Boolean(12)); // true

五、运算符

1.算数运算符

  1. console.log(1 + 1); // 2
  2. console.log(1 - 1); // 0
  3. console.log(1 * 1); // 1
  4. console.log(1 / 1); // 1
  5. // 1.取余%
  6. console.log(3 % 2); // 1
  7. console.log(5 % 3); // 2
  8. console.log(3 % 5 ); // 3
  9. // 2.浮点数 算数运算会有问题
  10. console.log(0.1 + 0.2); // 0.30000000000000004
  11. console.log(0.07 * 100); // 7.000000000000001
  12. // 3. 不能直接用浮点数进行数值比较
  13. var num = 0.1 + 0.3;
  14. console.log(0.3 == num); // false

2.表达式与返回值

表达式是由数字、运算符、变量等组成的式子 我们称为表达式

  1. // 表达式是由数字、运算符、变量等组成的式子 我们称为表达式
  2. console.log(1 + 1); // 2 就是返回值

关于运算符的跳过!

六、流程控制

1.if语句

if语法结构

  1. // 1.if的语法结构
  2. if (条件表达式){
  3. // 执行语句
  4. }

2.进入网吧案例

用户打开网页,提示用户输入年龄,如果用户年龄大于等于18岁,就给出提示。

  1. var age = prompt('请输入您的年龄:');
  2. if (age >= 18){
  3. alert('我想带你去网吧偷耳机!');
  4. }

3.if-else双分支语句

  1. // 语法结构
  2. if(条件表达式){
  3. // 语法语句1
  4. }else{
  5. // 执行语句2
  6. }
  1. var age = prompt('请输入您的年龄:');
  2. if (age >= 18){
  3. alert('我带你去网吧偷耳机!');
  4. }else{
  5. alert('滚,回家做作业去!');
  6. }

4. 判断闰年

  1. var year = prompt('请输入一个年份:');
  2. if (year % 4 ==0 && year % 100 != 0 || year % 400 == 0){
  3. alert(year + '是闰年');
  4. }else{
  5. alert(year + '不是闰年');
  6. }

5.if-else-if多分支语句

  1. if (条件语句1){
  2. // 执行语句 1
  3. }else if(条件语句2){
  4. // 执行语句2
  5. }else if (条件语句3){
  6. // 执行语句3
  7. }else{
  8. // 执行语句4
  9. }

6.三元表达式

  1. // 条件表达式 ? 表达式1 : 表达式2
  2. var num = 5;
  3. num > 6 ? alert('True') : alert('False')

3.for循环

  1. for(初始化变量;条件表达式;操作表达式){
  2. // 循环体
  3. }
  4. for(var i = 1;i <= 100;i++){
  5. console.log(i)
  6. }

打印九九乘法表

  1. for(var i = 1;i<=9;i++){
  2. var str = '';
  3. for(var j = 1;j<=i;j++){
  4. str += j + '*' + i + '=' + i*j + '\t\t';
  5. }
  6. console.log(str);
  7. }

4.while循环

  1. var num = 1;
  2. while(num <= 100){
  3. console.log(num);
  4. num ++;
  5. }

5.do-while循环

  1. var num = 1;
  2. do{
  3. console.log('张亚龙' + '*' + num);
  4. num ++;
  5. } while(num<=100);

6.简易ATM机

  1. var money = 100;
  2. var num = prompt('请输入你要的操作:' + '\n' + '1.存钱' + '\n' + '2.取钱' + '\n' + '3.显示余额' + '\n' + '4.退出');
  3. while (true){
  4. if (num == 1){
  5. money += parseFloat(prompt('请输入你要存入钱数:'));
  6. }else if(num == 2){
  7. money -= parseFloat(prompt('请输入你要取出钱数:'));
  8. }else if(num == 3){
  9. alert('当前余额为:' + money + '元.');
  10. }else{
  11. break;
  12. }
  13. var num = prompt('请输入你要的操作:' + '\n' + '1.存钱' + '\n' + '2.取钱' + '\n' + '3.显示余额' + '\n' + '4.退出');
  14. }

七、数组

1.创建数组

  1. // 普通的一个变量只能存储一个值;
  2. var num = 10;
  3. // 一个数组可以存储多个值;
  4. var arr = [1,2,3,4,5];
  5. // 1.利用new创建数组
  6. var arr1 = new Array();
  7. // 2.利用数组字面量创建数组 []
  8. var arr2 = ['red','blue','green']
  9. console.log(arr2);

2.获取数组元素

  1. var arr = ['red','green','black','blue']
  2. console.log(arr[0]); // red
  3. console.log(arr[3]); // blue
  4. console.log(arr[4]); // 因为没有4这个索引,所以结果是undefined

3.遍历数组与获取数组长度

  1. var arr = ['red','green','blue'];
  2. console.log(arr.length);
  3. for (var i =0;i<arr.length;i++) {
  4. console.log(arr[i]);
  5. }

4.数组新增元素

  1. // 1.通过数组的length修改
  2. var arr = ['red','blue','green'];
  3. arr.length = 5;
  4. console.log(arr);
  5. console.log(arr.length); // 5
  6. console.log(arr[3]); // undefined
  7. console.log(arr[4]); // undefined
  8. // 2.通过数组索引
  9. var arr1 = ['red','blue','green'];
  10. arr1[3] = 'yellow';
  11. console.log(arr1.length);
  12. console.log(arr1);

八、函数

1.函数的使用

  1. // 1.声明函数
  2. // function 函数名() {
  3. // // 函数体
  4. // }
  5. function sayhi() {
  6. console.log('Hello World!');
  7. }
  8. // 2.调用函数
  9. sayhi();

2.函数形参实参个数匹配

  1. function getnum(num1,num2) {
  2. console.log(num1,num2);
  3. }
  4. getnum(1,2); // 1 2
  5. getnum(1); // 1 undefined
  6. getnum(1,2,3); // 1 2

3.arguments的使用

  1. function fn() {
  2. console.log(arguments);
  3. console.log(arguments.length);
  4. console.log(arguments[2]);
  5. for (var i=0;i<arguments.length;i++) {
  6. console.log(arguments[i]);
  7. }
  8. }
  9. fn(1,2,3);

4.函数声明的两种方式

  1. // 1.利用函数关键是自定义函数
  2. function func() {
  3. // 函数体
  4. }
  5. // 调用方式
  6. func();
  7. // 2.函数表达式
  8. var func1 = function() {
  9. console.log('hello');
  10. }
  11. //调用方式
  12. func1()

5.预解析

1.预解析基本使用

  1. // console.log(num); // 报错 num is not defined
  2. // 1
  3. // console.log(num); // undefined
  4. // var num = 10;
  5. // 相当于执行了
  6. var num;
  7. console.log(num);
  8. num = 10;
  9. // 2
  10. fun(); // Hello
  11. function fun() {
  12. console.log('Hello');
  13. }
  14. // 3
  15. // func() // 报错 func is not a function
  16. // var func = function() {
  17. // console.log('World');
  18. // }
  19. // 相当于执行了
  20. var func;
  21. func();
  22. func = function() {
  23. console.log('World');
  24. }

2.预解析案例

  1. function func() {
  2. var a=b=c=9;
  3. console.log(a);
  4. console.log(b);
  5. console.log(c);
  6. }
  7. func()
  8. console.log(b);
  9. console.log(c);
  10. console.log(a);
  11. // 相当于执行
  12. function func() {
  13. var a=9;b=9;c=9;
  14. console.log(a);
  15. console.log(b);
  16. console.log(c);
  17. }
  18. func()
  19. console.log(b);
  20. console.log(c);
  21. console.log(a);

九、对象

1.利用字面量创建对象

  1. // 利用字面量创建对象
  2. var obj = {}; // 创建了一个空对象
  3. var obj1 = {
  4. uname: '张三丰',
  5. age: 18,
  6. sex: '男',
  7. sayHi: function() {
  8. console.log('Hi');
  9. }
  10. }
  11. // 调用对象
  12. console.log(obj1.uname);
  13. console.log(obj1['age']);
  14. console.log(obj1.sex);
  15. obj1.sayHi();

2.利用new Object创建对象

  1. // 利用new Object创建对象
  2. var obj = new Object(); // 创建了一个空对象
  3. obj.uanme = '男';
  4. obj.age = 18;
  5. obj.sex = '男';
  6. obj.sayHi = function() {
  7. console.log('Hi');
  8. }
  9. // 调用对象
  10. console.log(obj.uanme);
  11. console.log(obj['age']);
  12. obj.sayHi();

3.利用构造函数创建对象

  1. // 利用构造函数创建对象
  2. function Star(uname,age,sex) {
  3. this.name = uname;
  4. this.age = age;
  5. this.sex = sex;
  6. this.song = function(sang) {
  7. console.log(sang);
  8. }
  9. }
  10. var obj = new Star('张亚龙',18,'男')
  11. console.log(obj['name']);
  12. obj.song('冰雨')

JS-Dom

1.getElementById获取元素

此方法是根据元素ID来获取元素

  1. <div id="time">2021-10-09</div>
  1. var element = document.getElementById('time');
  2. console.log(element); // <div id="time">2021-10-09</div>
  3. console.log(typeof element); // object
  4. console.dir(element); // div#time 表示是div标签下id为time的元素

2.getElementsByTagName获取某类标签元素

此方法是根据标签名来获取元素

  1. <ul>
  2. <li>呵呵哈哈哈1</li>
  3. <li>呵呵哈哈哈2</li>
  4. <li>呵呵哈哈哈3</li>
  5. <li>呵呵哈哈哈4</li>
  6. <li>呵呵哈哈哈5</li>
  7. <li>呵呵哈哈哈6</li>
  8. </ul>
  1. // 返回的是获取对象的集合,伪数组
  2. var lis = document.getElementsByTagName('li');
  3. console.log(lis);
  4. console.log(lis[0]); // 输入第一个结果
  5. // 遍历打印结果
  6. for (var i = 0; i < lis.length; i++) {
  7. console.log(lis[i]);
  8. }
  9. // 获取某元素下的元素
  10. var uls = document.getElementsByTagName('ul');
  11. console.log(uls[0].getElementsByTagName('li'));

3.getElementsByClassName获取元素

此方法是根据类名来获取元素

  1. <div class="box">盒子1</div>
  2. <div class="box">盒子2</div>
  3. <div class="nav">
  4. <ul>
  5. <li>首页</li>
  6. <li>产品</li>
  7. </ul>
  8. </div>
  1. var box = document.getElementsByClassName('box');
  2. console.log(box);

4..querySelector获取元素

此方法是根据指定的选择器返回第一个元素

  1. <div class="box">盒子1</div>
  2. <div class="box">盒子2</div>
  3. <div class="nav">
  4. <ul>
  5. <li>首页</li>
  6. <li>产品</li>
  7. </ul>
  8. </div>
  1. // querySelector是返回匹配结果的第一个
  2. var firstbox = document.querySelector('.box');
  3. console.log(firstbox); // <div class="box">盒子1</div>
  4. var firstnav = document.querySelector('#nav'); // 结果为下面的注释
  5. /*
  6. <div id="nav">
  7. <ul>
  8. <li>首页</li>
  9. <li>产品</li>
  10. </ul>
  11. </div>
  12. */
  13. console.log(firstnav);
  14. var firstli = document.querySelector('li');
  15. console.log(firstli); // <li>首页</li>
  16. // querySelectorAll是返回所有符合结果的元素的集合
  17. console.log(document.querySelectorAll('li'));

5.获取body元素和html元素

  1. // 1.获取body标签
  2. var body = document.body;
  3. console.log(body);
  4. console.dir(body);
  5. // 2.获取html元素
  6. var html = document.documentElement;
  7. console.log(html);
  8. console.dir(html);

6.修改元素内容

  1. <button>按钮</button>
  2. <div>-------------</div>
  1. var btn = document.querySelector('button');
  2. var div = document.querySelector('div');
  3. btn.onclick = function () {
  4. div.innerText = '点击按钮修改内容';
  5. }

7.innerText和innerHTML区别

  1. <div></div>
  2. <p>
  3. Hello
  4. <span>今天是2021-10-9</span>
  5. </p>
  1. // innerText不识别HTML标签
  2. var div = document.querySelector('div');
  3. div.innerText = '<strong>今天是周六</strong>';
  4. // innerHTML识别HTML标签
  5. var div = document.querySelector('div');
  6. div.innerHTML = '<strong>今天是周六</strong>';
  7. var p = document.querySelector('p');
  8. console.log(p.innerText);
  9. console.log(p.innerHTML);

8.点击按钮切换图片

  1. <button id="zxy">张学友</button>
  2. <button id="ldh">刘德华</button>
  3. </br>
  4. <img id="img"
  5. src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdingyue.nosdn.127.net%2F3WKmSi9G2oCkRdfU004xJEtTbc%3DPbkZFzLgi08W%3DAr0CR1499226607542.jpg&refer=http%3A%2F%2Fdingyue.nosdn.127.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1635426519&t=432cc8238fd6531efd83b2ff1a73f662">
  1. var zxy = document.getElementById('zxy');
  2. var ldh = document.getElementById('ldh');
  3. var img = document.getElementById('img');
  4. zxy.onclick = function () {
  5. img.src = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdingyue.nosdn.127.net%2F3WKmSi9G2oCkRdfU004xJEtTbc%3DPbkZFzLgi08W%3DAr0CR1499226607542.jpg&refer=http%3A%2F%2Fdingyue.nosdn.127.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1635426519&t=432cc8238fd6531efd83b2ff1a73f662';
  6. }
  7. ldh.onclick = function () {
  8. img.src = 'https://img1.baidu.com/it/u=2117656796,1247674614&fm=253&fmt=auto&app=120&f=JPEG?w=690&h=362';
  9. }

9.操作元素值表单属性设置

  1. <button>按钮</button>
  2. <input type="text" value="输入内容">
  1. // 获取元素
  2. var btn = document.querySelector('button');
  3. var input = document.querySelector('input');
  4. // 注册事件,处理程序
  5. btn.onclick = function () {
  6. input.value = '按钮被点击了!';
  7. btn.disabled = true;
  8. }

10.通过className修改元素样式

通过js修改元素得class属性。会覆盖原有类名,若想保留原有类名,可以原类名+空格+新类名。

  1. element.style 行内样式操作
  2. element.className 类名样式操作

例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. div {
  10. width: 100px;
  11. height: 100px;
  12. background-color: red;
  13. }
  14. .change {
  15. background-color: green;
  16. color: white;
  17. font-size: 25px;
  18. margin-top: 100px;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <div>文本</div>
  24. <script>
  25. // 1.使用element.style修改元素样式,如果样式比较少,或者功能简单得情况下使用。
  26. // var test = document.querySelector('div')
  27. // test.onclick = function() {
  28. // this.style.backgroundColor = 'green'
  29. // this.style.color = 'white'
  30. // this.style.fontSize = '25px'
  31. // this.style.marginTop = '100px'
  32. // }
  33. // 2. 使用className修改元素样式
  34. var test = document.querySelector('div')
  35. test.onclick = function () {
  36. this.className = 'change';
  37. }
  38. </script>
  39. </body>
  40. </html>

11.仿新浪注册页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. div {
  10. width: 600px;
  11. height: 200px;
  12. }
  13. .message {
  14. display: inline-block;
  15. font-size: 15px;
  16. color: #999;
  17. background: url('./images/mess.png') no-repeat left center;
  18. padding-left: 20px;
  19. }
  20. .wrong {
  21. color: red;
  22. background-image: url('./images/wrong.png');
  23. }
  24. .right {
  25. color: green;
  26. background-image: url('images/right.png');
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <div>
  32. <input type="password" class="ipt">
  33. <p class="message">请输入6-16为密码</p>
  34. </div>
  35. <script>
  36. //首先判断的事件是表单失去焦点 onblur
  37. //如果输入正确则提示正确的信息颜色为绿色小图标变化
  38. //如果输入不是6到16位,则提示错误信息颜色为红色小图标变化
  39. //因为里面变化样式较多,我们采取className修改样式
  40. // 1.获取元素
  41. var ipt = document.querySelector('.ipt')
  42. var message = document.querySelector('.message')
  43. // 注册事件,失去焦点
  44. ipt.onblur = function () {
  45. // 根据表单里面值得长度判断ipt.value.length
  46. if (this.value.length<6 || this.value.length>16) {
  47. message.className = 'message wrong'
  48. message.innerHTML = '输入得位数部署6-16位,请重新输入!'
  49. } else {
  50. message.className = 'message right'
  51. message.innerHTML = '输入符合要求正确!'
  52. }
  53. }
  54. </script>
  55. </body>
  56. </html>

12.百度换肤效果

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. }
  13. body {
  14. background: url('images/1.jpg') no-repeat center top;
  15. }
  16. li {
  17. list-style: none;
  18. }
  19. .baidu {
  20. overflow: hidden;
  21. margin: 100px auto;
  22. background-color: #fff;
  23. width: 410px;
  24. padding-top: 3px
  25. }
  26. .baidu li {
  27. float: left;
  28. margin: 0 1px;
  29. cursor: pointer;
  30. }
  31. .baidu img {
  32. width: 100px;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <ul class="baidu">
  38. <li><img src="./Images/1.jpg" alt=""></li>
  39. <li><img src="./Images/2.jpg" alt=""></li>
  40. <li><img src="./Images/3.jpg" alt=""></li>
  41. <li><img src="./Images/4.jpg" alt=""></li>
  42. </ul>
  43. <script>
  44. var imgs = document.getElementsByTagName('img');
  45. for (var i=0;i< imgs.length;i++) {
  46. imgs[i].onclick = function() {
  47. console.log(imgs);
  48. document.body.style.backgroundImage = 'url(' + this.src +')'
  49. }
  50. }
  51. </script>
  52. </body>
  53. </html>

13.表格隔行变色效果

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. table {
  10. width: 800px;
  11. margin: 100px auto;
  12. text-align: center;
  13. border-collapse: collapse;
  14. font-size: 14px;
  15. }
  16. thead tr {
  17. height: 30px;
  18. background-color: skyblue;
  19. }
  20. tbody tr {
  21. height: 30px;
  22. }
  23. tbody td {
  24. border-bottom: 1px solid #d7d7d7;
  25. font-size: 12px;
  26. color: blue;
  27. }
  28. .bg {
  29. background-color: pink;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <table>
  35. <thead>
  36. <tr>
  37. <th>代码</th>
  38. <th>名称</th>
  39. <th>最新公布净值</th>
  40. <th>累计净值</th>
  41. <th>前单位净值</th>
  42. <th>净值增长率</th>
  43. </tr>
  44. </thead>
  45. <tbody>
  46. <tr>
  47. <td>003526</td>
  48. <td>农银金穗3个月定期开放债券</td>
  49. <td>1.075</td>
  50. <td>1.079</td>
  51. <td>1.074</td>
  52. <td>+0.047%</td>
  53. </tr>
  54. <tr>
  55. <td>003526</td>
  56. <td>农银金穗3个月定期开放债券</td>
  57. <td>1.075</td>
  58. <td>1.079</td>
  59. <td>1.074</td>
  60. <td>+0.047%</td>
  61. </tr>
  62. <tr>
  63. <td>003526</td>
  64. <td>农银金穗3个月定期开放债券</td>
  65. <td>1.075</td>
  66. <td>1.079</td>
  67. <td>1.074</td>
  68. <td>+0.047%</td>
  69. </tr>
  70. <tr>
  71. <td>003526</td>
  72. <td>农银金穗3个月定期开放债券</td>
  73. <td>1.075</td>
  74. <td>1.079</td>
  75. <td>1.074</td>
  76. <td>+0.047%</td>
  77. </tr>
  78. <tr>
  79. <td>003526</td>
  80. <td>农银金穗3个月定期开放债券</td>
  81. <td>1.075</td>
  82. <td>1.079</td>
  83. <td>1.074</td>
  84. <td>+0.047%</td>
  85. </tr>
  86. <tr>
  87. <td>003526</td>
  88. <td>农银金穗3个月定期开放债券</td>
  89. <td>1.075</td>
  90. <td>1.079</td>
  91. <td>1.074</td>
  92. <td>+0.047%</td>
  93. </tr>
  94. </tbody>
  95. </table>
  96. <script>
  97. var obj = document.querySelector('tbody').querySelectorAll('tr');
  98. for (var i = 0; i < obj.length; i++) {
  99. obj[i].onmouseover = function () {
  100. this.className = 'bg'
  101. }
  102. obj[i].onmouseout = function () {
  103. this.className = '';
  104. }
  105. }
  106. </script>
  107. </body>
  108. </html>

14.表格全选取消全选

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. * {
  8. padding: 0;
  9. margin: 0;
  10. }
  11. .wrap {
  12. width: 300px;
  13. margin: 100px auto 0;
  14. }
  15. table {
  16. border-collapse: collapse;
  17. border-spacing: 0;
  18. border: 1px solid #c0c0c0;
  19. width: 300px;
  20. }
  21. th,
  22. td {
  23. border: 1px solid #d0d0d0;
  24. color: #404060;
  25. padding: 10px;
  26. }
  27. th {
  28. background-color: #09c;
  29. font: bold 16px "微软雅黑";
  30. color: #fff;
  31. }
  32. td {
  33. font: 14px "微软雅黑";
  34. }
  35. tbody tr {
  36. background-color: #f0f0f0;
  37. }
  38. tbody tr:hover {
  39. cursor: pointer;
  40. background-color: #fafafa;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div class="wrap">
  46. <table>
  47. <thead>
  48. <tr>
  49. <th>
  50. <input type="checkbox" id="j_cbAll" />
  51. </th>
  52. <th>商品</th>
  53. <th>价钱</th>
  54. </tr>
  55. </thead>
  56. <tbody id="j_tb">
  57. <tr>
  58. <td>
  59. <input type="checkbox" />
  60. </td>
  61. <td>iPhone8</td>
  62. <td>8000</td>
  63. </tr>
  64. <tr>
  65. <td>
  66. <input type="checkbox" />
  67. </td>
  68. <td>iPad Pro</td>
  69. <td>5000</td>
  70. </tr>
  71. <tr>
  72. <td>
  73. <input type="checkbox" />
  74. </td>
  75. <td>iPad Air</td>
  76. <td>2000</td>
  77. </tr>
  78. <tr>
  79. <td>
  80. <input type="checkbox" />
  81. </td>
  82. <td>Apple Watch</td>
  83. <td>2000</td>
  84. </tr>
  85. </tbody>
  86. </table>
  87. </div>
  88. <script>
  89. // 获取全选按钮
  90. var j_cbAll = document.getElementById('j_cbAll')
  91. // 获取其他多选框
  92. var j_tb = document.getElementById('j_tb').getElementsByTagName('input')
  93. // 实现全部多选
  94. j_cbAll.onclick = function () {
  95. for (var i = 0; i < j_tb.length; i++) {
  96. j_tb[i].checked = this.checked
  97. }
  98. }
  99. // 单个多选框实现选择
  100. for (var i = 0; i < j_tb.length; i++) {
  101. j_tb[i].onclick = function () {
  102. var flag = true;
  103. for (var j = 0; j < j_tb.length; j++) {
  104. if (!j_tb[j].checked) {
  105. flag = false
  106. break
  107. }
  108. }
  109. j_cbAll.checked = flag
  110. }
  111. }
  112. </script>
  113. </body>
  114. </html>

15.自定义属性操作

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="demo1" index="1"></div>
  11. <script>
  12. var div = document.querySelector('#demo1')
  13. // 1.获取元素得值
  14. // element.属性名
  15. console.log(div.id);
  16. // element.getAttribute('属性'),主要用来获取自己定义得一些属性
  17. console.log(div.getAttribute('id'));
  18. // 2.设置元素属性值
  19. // element.属性 = '值'
  20. div.id = 'test'
  21. console.log(div.id);
  22. // element.setAttribute('属性','值')
  23. div.setAttribute('id','test1')
  24. console.log(div.id);
  25. </script>
  26. </body>
  27. </html>

16.tab栏切换布局

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. .tab {
  15. margin: 100px auto;
  16. }
  17. .tab_list {
  18. height: 39px;
  19. background-color: #f1f1f1;
  20. border: 1px solid #ccc;
  21. }
  22. .tab_list li {
  23. float: left;
  24. height: 39px;
  25. line-height: 39px;
  26. padding: 0 10px;
  27. text-align: center;
  28. cursor: pointer;
  29. }
  30. li {
  31. list-style-type: none;
  32. }
  33. .tab_list .current {
  34. background-color: #c81623;
  35. color: white;
  36. }
  37. .item {
  38. display: none;
  39. }
  40. .iteminfo {
  41. display: block;
  42. }
  43. </style>
  44. <body>
  45. <div class="tab">
  46. <div class="tab_list">
  47. <ul>
  48. <li class="current">商品介绍</li>
  49. <li>规格与包装</li>
  50. <li>售后保障</li>
  51. <li>商品评价(50000)</li>
  52. <li>手机社区</li>
  53. </ul>
  54. </div>
  55. <div class="tab_con">
  56. <div class="item">商品介绍模块</div>
  57. <div class="item">规格与包装模块</div>
  58. <div class="item">售后保障模块</div>
  59. <div class="item">商品评价(50000)模块</div>
  60. <div class="item">手机社区模块</div>
  61. </div>
  62. </div>
  63. <script>
  64. var lis = document.querySelectorAll('li')
  65. var items = document.querySelectorAll('.item')
  66. for (var i = 0; i < lis.length; i++) {
  67. lis[i].onclick = function () {
  68. for (var j = 0; j < lis.length; j++) {
  69. lis[j].className = ''
  70. }
  71. this.setAttribute('class', 'current')
  72. for (var i = 0; i < lis.length; i++) {
  73. if (lis[i].className == 'current') {
  74. items[i].className = 'iteminfo'
  75. } else {
  76. items[i].className = 'item'
  77. }
  78. }
  79. }
  80. }
  81. </script>
  82. </body>
  83. </html>

18.节点操作

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="div1">我是div</div>
  11. <span>我是span</span>
  12. <ul>
  13. <li>我是li</li>
  14. <li>我是li</li>
  15. <li>我是li</li>
  16. <li>我是li</li>
  17. <li>我是li</li>
  18. </ul>
  19. <div class="box">
  20. <div class="erweima"></div>
  21. </div>
  22. <ul id="ul1">
  23. </ul>
  24. <ul class="remove">
  25. <li>熊大</li>
  26. <li>熊二</li>
  27. <li>光头强</li>
  28. </ul>
  29. <button id="submit_remove">删除</button>
  30. <ul class="clone">
  31. <li>1</li>
  32. <li>2</li>
  33. <li>3</li>
  34. </ul>
  35. <script>
  36. // 1.父节点
  37. var erweima = document.querySelector('.erweima')
  38. // 得到的是离得最近的父节点
  39. console.log(erweima.parentElement);
  40. // 2.子节点,包含所有节点,文字节点,元素节点。
  41. // 元素节点nodetype是1,文字节点nodetype是2
  42. var ul = document.querySelector('ul')
  43. console.log(ul.childNodes);
  44. for (var i = 0; i < ul.childNodes.length; i++) {
  45. if (ul.childNodes[i].nodeType == 1) {
  46. console.log(ul.childNodes[i]);
  47. }
  48. }
  49. // 3.子节点,只包含元素节点
  50. console.log(ul.children);
  51. // 4.获取第一个元素和最后一个元素(包含元素节点和文本节点)
  52. console.log(ul.firstChild);
  53. console.log(ul.lastChild);
  54. // 5.获取第一个元素和最后一个元素(只包含元素节点)
  55. console.log(ul.firstElementChild);
  56. console.log(ul.lastElementChild);
  57. // 6.兄弟节点nextSibling,包含下一个节点,包含文本节点和元素节点
  58. var div = document.querySelector('#div1')
  59. console.log(div.nextSibling);
  60. console.log(div.previousSibling);
  61. // 7.兄弟节点只包含元素节点,找不到返回null
  62. console.log(div.nextElementSibling);
  63. console.log(div.previousElementSibling);
  64. // 8.创建节点
  65. var li = document.createElement('li')
  66. // 9.添加节点 node.appendChild(child) node父级,child子级 追加
  67. var ul = document.querySelector('#ul1')
  68. li.innerHTML = '<h1>这是添加的li</li>'
  69. ul.appendChild(li)
  70. console.log(ul.children[0]);
  71. // 10.在某个元素前面添加元素
  72. var li1 = document.createElement('li')
  73. li1.innerHTML = '<h1>这是添加的li1</li>'
  74. ul.insertBefore(li1, ul.children[0])
  75. // 11.删除节点
  76. var ul = document.querySelector('.remove')
  77. // 删除第一个
  78. ul.removeChild(ul.children[0])
  79. // 12.用按钮依次删除
  80. var btn = document.querySelector('#submit_remove')
  81. btn.onclick = function () {
  82. if (ul.children.length == 0) {
  83. this.disabled = true
  84. } else {
  85. ul.removeChild(ul.children[0])
  86. }
  87. }
  88. // 13.克隆节点
  89. var ulclone = document.querySelector('.clone')
  90. ulclone.appendChild(ulclone.children[0].cloneNode(true))
  91. </script>
  92. </body>
  93. </html>

19.新浪下拉菜单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. li {
  14. list-style-type: none;
  15. }
  16. a {
  17. text-decoration: none;
  18. font-size: 14px;
  19. }
  20. .nav {
  21. margin: 100px;
  22. }
  23. .nav>li {
  24. position: relative;
  25. float: left;
  26. width: 80px;
  27. height: 41px;
  28. text-align: center;
  29. }
  30. .nav li a {
  31. display: block;
  32. width: 100%;
  33. height: 100%;
  34. line-height: 41px;
  35. color: #333;
  36. }
  37. .nav>li>a:hover {
  38. background-color: #eee;
  39. }
  40. .nav ul {
  41. display: none;
  42. position: absolute;
  43. top: 41px;
  44. left: 0;
  45. width: 100%;
  46. border-left: 1px solid #FECC5B;
  47. border-right: 1px solid #FECC5B;
  48. }
  49. .nav ul li {
  50. border-bottom: 1px solid #FECC5B;
  51. }
  52. .nav ul li a:hover {
  53. background-color: #FFF5DA;
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <ul class="nav">
  59. <li>
  60. <a href="#">微博</a>
  61. <ul>
  62. <li>
  63. <a href="">私信</a>
  64. </li>
  65. <li>
  66. <a href="">评论</a>
  67. </li>
  68. <li>
  69. <a href="">@我</a>
  70. </li>
  71. </ul>
  72. </li>
  73. <li>
  74. <a href="#">微博</a>
  75. <ul>
  76. <li>
  77. <a href="">私信</a>
  78. </li>
  79. <li>
  80. <a href="">评论</a>
  81. </li>
  82. <li>
  83. <a href="">@我</a>
  84. </li>
  85. </ul>
  86. </li>
  87. <li>
  88. <a href="#">微博</a>
  89. <ul>
  90. <li>
  91. <a href="">私信</a>
  92. </li>
  93. <li>
  94. <a href="">评论</a>
  95. </li>
  96. <li>
  97. <a href="">@我</a>
  98. </li>
  99. </ul>
  100. </li>
  101. <li>
  102. <a href="#">微博</a>
  103. <ul>
  104. <li>
  105. <a href="">私信</a>
  106. </li>
  107. <li>
  108. <a href="">评论</a>
  109. </li>
  110. <li>
  111. <a href="">@我</a>
  112. </li>
  113. </ul>
  114. </li>
  115. </ul>
  116. <script>
  117. var lis = document.querySelector('.nav').children
  118. for (var i = 0; i < lis.length; i++) {
  119. lis[i].onmouseover = function () {
  120. console.log(this.children[1]);
  121. this.children[1].style.display = 'block'
  122. }
  123. lis[i].onmouseout = function () {
  124. this.children[1].style.display = 'none'
  125. }
  126. }
  127. </script>
  128. </body>
  129. </html>

20.简单版发布留言板案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. li {
  10. color: red;
  11. background-color: pink;
  12. width: 100px;
  13. height: 30px;
  14. line-height: 30px;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <textarea rows="20" cols="20" maxlength="100"></textarea>
  20. <input type="submit" name="submit" id="submit">
  21. <ul>
  22. </ul>
  23. <script>
  24. var submit = document.querySelector('#submit')
  25. var ul = document.querySelector('ul')
  26. var textarea = document.querySelector('textarea')
  27. submit.onclick = function () {
  28. if (textarea.value == '') {
  29. alert("不可为空!")
  30. } else {
  31. var li = document.createElement('li')
  32. li.innerText = textarea.value
  33. ul.insertBefore(li, ul.children[0])
  34. }
  35. }
  36. </script>
  37. </body>
  38. </html>

21.删除留言案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. textarea {
  14. margin: 10px 0px 0px 20px;;
  15. }
  16. li {
  17. margin-left: 10px;
  18. color: red;
  19. background-color: pink;
  20. width: 300px;
  21. height: 30px;
  22. line-height: 30px;
  23. }
  24. ul li a{
  25. float: right;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <textarea rows="20" cols="20" maxlength="100"></textarea>
  31. <input type="submit" name="submit" id="submit">
  32. <ul>
  33. </ul>
  34. <script>
  35. var submit = document.querySelector('#submit')
  36. var ul = document.querySelector('ul')
  37. var textarea = document.querySelector('textarea')
  38. submit.onclick = function () {
  39. if (textarea.value == '') {
  40. alert("不可为空!")
  41. } else {
  42. var li = document.createElement('li')
  43. li.innerHTML = textarea.value + "<a href='javascript:;' style='float=right;'>删除</a>"
  44. ul.insertBefore(li, ul.children[0])
  45. var as = document.querySelectorAll('a')
  46. for (var i=0;i<as.length;i++) {
  47. as[i].onclick = function() {
  48. // console.log(this.parentNode)
  49. ul.removeChild(this.parentNode)
  50. }
  51. }
  52. }
  53. }
  54. </script>
  55. </body>
  56. </html>

22.动态生成表格

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. table {
  10. width: 500px;
  11. margin: 100px auto;
  12. border-collapse: collapse;
  13. text-align: center;
  14. }
  15. td,
  16. th {
  17. border: 1px solid #333;
  18. }
  19. thead tr {
  20. height: 40px;
  21. background-color: #ccc;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <table cellspacing="0">
  27. <thead>
  28. <tr>
  29. <th>姓名</th>
  30. <th>科目</th>
  31. <th>成绩</th>
  32. <th>操作</th>
  33. </tr>
  34. </thead>
  35. <tbody>
  36. </tbody>
  37. </table>
  38. <script>
  39. var datas = [{
  40. name: '卫英络',
  41. subject: 'javascript',
  42. score: 100
  43. }, {
  44. name: '宏利',
  45. subject: 'javascript',
  46. score: 98
  47. }, {
  48. name: '傅亨',
  49. subject: 'javascript',
  50. score: 99
  51. }, {
  52. name: '明宇',
  53. subject: 'javascript',
  54. score: 88
  55. },]
  56. var tbody = document.querySelector('tbody')
  57. for (var i = 0; i < datas.length; i++) {
  58. // 创建行
  59. var tr = document.createElement('tr')
  60. tbody.appendChild(tr)
  61. // 行里面创建单元格
  62. for (var k in datas[i]) {
  63. var td = document.createElement('td')
  64. td.innerText = datas[i][k]
  65. tr.appendChild(td)
  66. }
  67. var td = document.createElement('td')
  68. td.innerHTML = "<a href='javascript:;'>删除</a>"
  69. tr.appendChild(td)
  70. }
  71. var as = document.querySelectorAll('a')
  72. for (var i = 0; i < as.length; i++) {
  73. as[i].onclick = function () {
  74. tbody.removeChild(this.parentNode.parentNode)
  75. }
  76. }
  77. </script>
  78. </body>
  79. </html>

23.注册事件的2种方式

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <button>传统注册方式</button>
  11. <button>方法监听注册方式</button>
  12. <script>
  13. // 1.传统方式:一个元素创建两个事件会只执行一个(最后一个)
  14. var btns = document.querySelectorAll('button')
  15. btns[0].onclick = function() {
  16. alert('test1')
  17. }
  18. btns[0].onclick = function() {
  19. alert('test2')
  20. }
  21. // 2.事件监听注册方式
  22. // eventTarget.addEventListener(type,listener[,useCapture])
  23. // 该方法将只当的监听器注册到eventTarget(目标对象上),当该对象触发指定的事件时,就会执行事件处理函数。
  24. // type 事件类型字符串,比如click,mouseover
  25. // listener 事件处理函数,事件发生时,会调用该监听函数
  26. // useCapture 可选参数,是一个布尔值,默认false
  27. btns[1].addEventListener('click',function() {
  28. alert('test3')
  29. })
  30. btns[1].addEventListener('click',function() {
  31. alert('test4')
  32. })
  33. </script>
  34. </body>
  35. </html>

24.删除事件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. div {
  10. height: 100px;
  11. width: 100px;
  12. background-color: pink;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div>1</div>
  18. <div>2</div>
  19. <div>3</div>
  20. <script>
  21. // 1.传统方式
  22. var divs = document.querySelectorAll('div')
  23. divs[0].onclick = function() {
  24. alert(123)
  25. divs[0].onclick = null
  26. }
  27. // 2.监听方式
  28. function fn() {
  29. alert(456)
  30. divs[1].removeEventListener('click', fn)
  31. }
  32. divs[1].addEventListener('click',fn)
  33. </script>
  34. </body>
  35. </html>

25.事件对象

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>123</div>
  11. <script>
  12. var div = document.querySelector('div')
  13. div.onclick = function(event){
  14. console.log(event);
  15. }
  16. // 1. event就是一个事件对象,当作形参来看
  17. // 2. 事件对象只有有了事件才会存在,他是系统给我们创建的,不需要我们传递参数
  18. // 3. 事件对象 是我们事件的一些列相关数据的集合 跟事件相关的 比如鼠标点击里面就包含了鼠标的相关信息,鼠标坐标等。
  19. </script>
  20. </body>
  21. </html>

26.常见事件对象的属性和方法

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>112</div>
  11. <ul>
  12. <li>abc</li>
  13. <li>abc</li>
  14. <li>abc</li>
  15. </ul>
  16. <a href="http://wwwbaidu.com">百度</a>
  17. <form action="http://www.baidu.com">
  18. <input type="submit" name="提交" id="sub">
  19. </form>
  20. <script>
  21. var div = document.querySelector('div')
  22. div.addEventListener('click',function(e) {
  23. // 返回触发事件的对象
  24. // 1.e.target返回的是触发事件的对象
  25. console.log(e.target);
  26. // 2.this返回的是绑定事件的对象
  27. console.log(this);
  28. // 3.e.type返回事件类型
  29. console.log(e.type);
  30. })
  31. var ul = document.querySelector('ul')
  32. ul.addEventListener('click',function(e){
  33. console.log(e.target);
  34. console.log(this);
  35. })
  36. // 4.阻止默认行为,让连接不跳转 或者让提交按钮不提交
  37. var a = document.querySelector('a')
  38. a.addEventListener('click',function(e){
  39. e.preventDefault()
  40. })
  41. </script>
  42. </body>
  43. </html>

27.阻止冒泡

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. .outer {
  10. overflow: hidden;
  11. width: 300px;
  12. height: 300px;
  13. background-color: pink;
  14. margin: 0 auto;
  15. }
  16. .inner {
  17. margin: 50px;
  18. width: 200px;
  19. height: 200px;
  20. line-height: 200px;
  21. background-color: green;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div class="outer">
  27. <div class="inner"></div>
  28. </div>
  29. <script>
  30. var outer = document.querySelector('.outer')
  31. outer.addEventListener('click',function(e){
  32. alert(123)
  33. })
  34. var inner = document.querySelector('.inner')
  35. inner.addEventListener('click', function (e) {
  36. alert(456)
  37. // 阻止事件冒泡
  38. e.stopPropagation()
  39. })
  40. </script>
  41. </body>
  42. </html>

28.常用鼠标事件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. body {
  10. height: 3000px;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
  16. <script>
  17. // 1.禁用右键菜单contextmenu
  18. document.addEventListener('contextmenu',function(e){
  19. e.preventDefault()
  20. })
  21. // 2.禁止选中文字selectstart
  22. document.addEventListener('selectstart',function(e){
  23. e.preventDefault()
  24. })
  25. // 3.获取鼠标x和y坐标,相对于浏览器窗口可视区域
  26. document.addEventListener('click',function(e){
  27. console.log(e.clientX);
  28. console.log(e.clientY);
  29. console.log("-------------------------");
  30. })
  31. // 4.获取鼠标x和y坐标,相对于页面
  32. document.addEventListener('click',function(e){
  33. console.log(e.pageX);
  34. console.log(e.pageY);
  35. console.log("-------------------------");
  36. })
  37. // 5.反会鼠标相对于电脑屏幕的x和y坐标
  38. document.addEventListener('click',function(e){
  39. console.log(e.screenX);
  40. console.log(e.screenY);
  41. })
  42. </script>
  43. </body>
  44. </html>

29.跟随鼠标的天使

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. img {
  10. position: absolute;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <img src="./Images/angel.gif">
  16. <script>
  17. var img = document.querySelector('img')
  18. document.addEventListener('mousemove',function(e){
  19. // mousemove只要鼠标移动了1px,就触发这个事件
  20. var x = e.pageX
  21. var y = e.pageY
  22. console.log(img.width);
  23. img.style.left = x - img.width/4 + 'px'
  24. img.style.top = y - img.height/2 + 'px'
  25. })
  26. </script>
  27. </body>
  28. </html>

30.键盘常用事件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 1.keyup键盘按下弹起时触发
  12. document.onkeyup = function() {
  13. console.log("我弹起了");
  14. }
  15. // 2.keydown键盘按下时触发 ,闭keypress优先触发
  16. document.onkeydown = function() {
  17. console.log("我按下了");
  18. }
  19. // 3.keypress键盘按下时触发,但不识别功能键,如ctrl,shift 箭头等。
  20. document.onkeypress = function() {
  21. console.log("我按下了111");
  22. }
  23. </script>
  24. </body>
  25. </html>

31.键盘事件之keyCode事件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. // keyup打印ascll码,不区分大小写
  12. document.addEventListener('keyup',function(e){
  13. console.log(e.keyCode);
  14. })
  15. // keyup打印ascll码,不区分大小写
  16. document.addEventListener('keypress',function(e){
  17. console.log(e.keyCode);
  18. })
  19. </script>
  20. </body>
  21. </html>

32.模拟京东按键输入内容

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <input type="text" name="" id="">
  11. <script>
  12. var search = document.querySelector('input')
  13. document.addEventListener('keyup',function(e){
  14. console.log(e.keyCode);
  15. if (e.keyCode == 83) {
  16. search.focus()
  17. }
  18. })
  19. </script>
  20. </body>
  21. </html>

33.模拟京东快读查询

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. .search {
  14. position: relative;
  15. width: 178px;
  16. margin: 100px;
  17. }
  18. .con {
  19. display: none;
  20. position: absolute;
  21. top: -40px;
  22. width: 171px;
  23. border: 1px solid rgba(0, 0, 0, .2);
  24. box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
  25. padding: 5px 0;
  26. font-size: 18px;
  27. line-height: 20px;
  28. color: #333;
  29. }
  30. .con::before {
  31. content: '';
  32. width: 0;
  33. height: 0;
  34. position: absolute;
  35. top: 28px;
  36. left: 18px;
  37. border: 8px solid #000;
  38. border-style: solid dashed dashed;
  39. border-color: #fff transparent transparent;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div class="search">
  45. <div class="con">123</div>
  46. <input type="text" placeholder="请输入您的快递单号" class="jd">
  47. </div>
  48. <script>
  49. var con = document.querySelector('.con')
  50. var inp = document.querySelector('input')
  51. inp.addEventListener('keyup', function () {
  52. if (inp.value == '') {
  53. con.style.display = 'none'
  54. } else {
  55. con.style.display = 'block'
  56. con.innerText = this.value
  57. }
  58. inp.addEventListener('blur',function() {
  59. con.style.display = 'none'
  60. })
  61. inp.addEventListener('focus',function(){
  62. if (inp.value!=''){
  63. con.style.display = 'block'
  64. }
  65. })
  66. })
  67. </script>
  68. </body>

3.Js-Bom

BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心是window