JavaScript入门(一)<遇见狂神说>

1、什么是JavaScript

1.1、概述

JavaScript是一门世界上最流行的脚本语言

大部分都是在做网络通信,交互,和DOM

JS控制网页的行为

好处:

弊端:支持不了高并发

1.2、历史

ECMAScript它可以理解为是JavaScript的一个标准

目前到es6的标准,但大部分的浏览器还是停留在es5代码上

2、快速入门

2.1、引入JavaScript

1、内部标签

<script>
   //...
</script>

2、外部引入

abs.js

//...

test.html

<script src="abc.js"></script>

2.2、 基本语法入门

2.3 、数据类型

数值、文本、图形、音频,视频…

number

JS不区分小数和整数,Number

123  //整数123
123.1  //浮点数123.1
123e3  //科学计数法
-99  //负数
NaN  //NOT a number
Infinity //表示无限大

在这里插入图片描述

字符串

‘abc’ “abc”

布尔值

true , false

逻辑运算符

&&  两个为真,才是真
||  一个为真,结果为真
!  取反

比较运算符

=
== 等于(类型不一样,值一样,也会判断为true;  如数字的1  和字符串的"1" , js会判断其相等)
=== 等于(类型一样,值一样,结果才为true)

这是JS的一个缺陷,坚持不要用 == 做比较

注意:

  • NaN===NaN ,这个与所有的数值都不相等,包括自己
  • 只能通过isNaN(NaN)来判断这个数是否是NaN

在这里插入图片描述

浮点数问题:

console.log((1/3)===(1-2/3));  //false

尽量避免使用浮点数进行运算,因为存在精度问题

Math.abs((1/3)-(1-2/3))<0.000000001;  //true

null和undefined

  • null 空
  • undefined 未定义

数组

为了保证代码的可读性,数组尽量用 [ ]

Java中的数组必须是相同类型的对象,JS中不需要这样!

var arr=[1,2,3,'hello',"world"];

new Array(2,3,4,'hellt');
//JS的数组下标:如果越界了,就会报 undenfined

对象

定义一个对象,取对象的值

//Person person=new Person(1,2,3,4);

var Person={

    name:"xilige",

    age:"10",
    
    tags:['js','java','web']

    }

在这里插入图片描述

2.4、严格检查模式Strict

//'user strict';  严格检查模式,预防JavaScript的随意性导致一些问题产生  必须写在JS的第一行

'user strict';

//定义一个局部变量,用let 定义
//全局变量: var

let o=10;

var i=1;

3、 数据类型

3.1、字符串 String

1、正常字符串 我们用 单引号 ’ ‘ 或 双引号 " " 包裹

2、 注意转义字符 \

\'   
\n   
\t
\u4e2d   \u####  unicode字符

3、多行字符串编写 使用:`` 符号包裹(关注)

var name= `
	hello
	world
	你好
	你好
`

4、模板字符串

let name="Tom";
let msg=`你好,${name}`;
console.log(msg);    //得到   你好,Tom

5、字符串长度

字符串名.length

6、字符串的可变性,不可变(关注)

在这里插入图片描述

7、字符串大小写的转换,利用方法

在这里插入图片描述

大写: 字符串名.toUppeCase()
小写: 字符串名.toLowerCase()

8、获取指定字符的下标

在这里插入图片描述

字符串名.indexOf('对应字符')

9、截取字符串(关注)

在这里插入图片描述

字符串名.substring(对应字符位置)
1.这里截取的是对应位置和位置之后的字符串(如图是截取了student中的2的位置,
即s—>0  ; t->1 ; u->2,  是从2开始截取,所以2之前,0和1的字符串都不保留)

2.student.substring(1,3)  得到tu 
//其实表示的就是[1,3),1和2位置上的字符传保留,3位置上的字符串不取

3.2、数组 Array

Array可以包含任意的数据类型

var arr=[1,2,3,4,5,6]

1、数组长度(可赋值产生变化)

arr.length
arr.length=10
arr.length=2

给长度赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失

2、indexOf 查找元素获得下标索引

arr.indexOf(2);   //得到 1
这里的(A)  指的是在对应数组里出现A 是第几位
上面因为  0位->1;  1位->2;  所以得到1

3、slice()

截取Array的一部分,返回一个新的数组,类似于String中的 substring

4、push() 、pop()

push: 压到尾部
pop:弹出尾部的一个元素

5、unshift()、shift()

unshift:压入到头部
shift:弹出头部的第一个元素

6、sort() 排序 (默认是正序排列,尝试了未改变,了解即可)

var arr=["A","B","C"];
arr.sort();
["B","A","C"];

7、reverse() 元素反转

var arr=["A","B","C"];
arr.reverse();
["C","B","A"];

8、concat() 粘合

var arr=["A","B","C"];
arr.concat([1,2,3]);
["C", "B", "A", 1, 2, 3]

9、join() 连接符 打印拼接数组, 使用特定的字符串连接

arr1
["C", "B", "A"]
arr1.join("a");
"CaBaA"
arr1.join("+");
"C+B+A"

10、多维数组

arr=[[1,2],[3,4],["5","6"]];
arr[1][1];
4

数组总结:存储数组(如何存、如何取、方法都可以自己实现)

3.3、对象

若干个键值对

var 对象名={
	属性名:属性值,
	属性名:属性值,
	属性名:属性值
}

//定义了一个person对象,它有四个属性
var person ={
    name:"cc",
    age:3,
    email:"jintao_chen@163.com",
    score:20
}

JS中对象,{…} 表示一个对象,键值对描述属性 xxx:xxx ,最后一个不加逗号

1、对象赋值

person.name="AA"   //得到"AA"
person.name        //得到"AA"

2、使用一个不存在的对象属性,不会报错,只会出现 undenfined

person.hh          //得到undenfined 

3、动态的删减属性 delete 类名.属性值 直接删除

person             //得到 {name: "AA", age: 3, email: "jintao_chen@163.com", score: 20}
delete person.age  //得到true
person             //得到{name: "AA", email: "jintao_chen@163.com", score: 20}

4、动态的添加 直接添加即可

person.age=3;      //得到3
person             //得到{name: "AA", email: "jintao_chen@163.com", score: 20, age: 3}

5、判断属性名是否在这个对象中! xxx in xxx

'age' in person    //得到true
//继承  'toString' in person   //得到true     而person里没有toString但是得到true的原因是在于 其父类是有toString的

6、判断一个属性是否是这个对象自身拥有的 hasOwnProperty()

personone.hasOwnProperty('toString')         //得到false
personone.hasOwnProperty('age')              //得到true

3.4、流程控制

while(){};

do{}while();

for(a;b;c){};

forEach循环;              //ES5.1引入的特性

for(var x in 属性名);     //循环出来的是下标位置值

for(var x of 属性名);     //循环出来的是属性值
示例:
let arr=["A","b","c"]    //这里就是定义了一个数组,let表示该数组为局部变量
for(let x in arr){ console.log(x)  }    //可以看到得到的是下标位置值
0
1
2

for(let y of arr){console.log(y)}      //可以看到得到的是属性值
A
b
c

3.5、Map 和 Set

ES6的新特性

Map:定义时里面得是键值对

//ES6 Map
//学生的成绩,学生的名字
//var map=new Map([['Tom',100],['jack',90],['haha',80]]);

var name=map.get('Tom');        //通过key获得value   得到100
map.set('admin',123456);		//新增
map.delete('Tom');              //删除

Set:无序不重复的集合 定义时里面也得是键值对

var set=new Set([3,1,1,1]);     
set                             //得到 Set(2) {3, 1}    ,可以看到这是无序不重复的
set.add(2);						//增加
set.delete(1);				    //删除
console.log(set.has(3));        //判断是否包含这个元素

3.6 iterator

ES6的新特性

4、函数

4.1、定义函数

定义方式一

绝对值函数

function abs(x){
      if(x>=0){
           return x;
      }else{
           return -x;
           }
}

一旦执行到 return,则代表函数结束,返回结果!

如果没有执行到 return,函数执行完也会返回结果,结果就是undefined

定义方式二

var abs=function(x){
      if(x>=0){
           return x;
      }else{
           return -x;
           }
}

function(x){…}这是一个匿名函数,但是可以把结果值赋给abs,通过abs就可以调用函数!

注: 方式一和方式二等价

调用函数

abs(10)  //得到 10
abs(-10) //得到 10

参数问题:JavaScript可以传任意个参数,也可以不传递参数

那么参数进来是否会存在问题?

如果传进来一个空参数,如何规避?

var abs=function(x){
	 //手动抛出异常
    if(typeof x!=='number'){
        throw 'Not A Number';
    }
    if(x>=0){
         return x;
      }else{
         return -x;
           }
}

arguments

arguments 是一个JS免费赠送的关键字 (需要考虑参数问题时用到他,JavaScript不限定参数)

代表,传递进来的所有参数是一个数组!

function abs(x){
     console.log("x=>"+x);
     for(let i=0;i<arguments.length;i++){
        console.log(arguments[i]); }
     if(x>=0){
        return x;
     }else{  return -x;
          }
}
abs(10,20,30,40)   
得到:
x=>10
10
20
30
40
10

问题:arguments包含所有的参数,我们有时候想使用多余的参数来进行附加操作,需要排除已有的参数

rest

ES6新特性,获取除了已经定义的参数之外的所有参数

function aaa(a,b,...rest){
	console.log("a=>"+a);
	console.log("b=>"+b);
	console.log(rest);
}

4.2变量的作用域

在JavaScript中,var定义变量是有作用域的。

假设在函数体中声明,则在函数体外不可使用 (非要实现的话可以研究一下 闭包)

function va(){
            var x=1;
            x=x+1;
        }
        x=x+2;   //得到的是 Uncaught ReferenceError: x is not defined

如果两个函数使用了相同的变量名,只要在函数内部,就不冲突

function qq(){
    var x=1;
    x= x +1;
}

function qq2(){
    var x='A';
    x= x +1;
}

内部函数可以访问外部函数的成员,反之则不行!

当内部函数变量名和外部函数变量名重名时,会存在一个查找的规则,内部函数就近原则会优先找内部的那个成员变量值,本质就还是用内部的!

var x=10;
function va(){
   var x=1;
   x=x+1;
   console.log(x);
}
console.log(x);    //得到 10
va;                //得到 2

提升变量的作用域

function vv(){
    var x="x"+y;
    console.log(x);
    var y='y';
}
//结果得到  xundefined

说明:JS执行引擎,自动提升了y的声明,但是不会把对y的赋值提上去;

所以需要养成 所有的变量定义都放在函数头部,便于代码维护;

function vv1(){
    var x=1,
        y=x+1,
        z,a,c;  //undefined
    
    //之后可以随意用
}

全局变量的规范!

背景:由于我们所有的全局变量都会绑定到 window 上,如果不同的 JS 文件,使用了相同名字的全局变量,那在合代码的时候容易造成冲突,那么如何减少这种冲突呢?

—自己定义一个唯一的全局变量

//唯一的全局变量
var chen={};

//定义全局变量
chen.name='chenjintao';
chen.add = function(a,b){
    return a+b;
}

把自己的代码全部放入自己定义的唯一的空间名字中,就可以降低全局命名冲突的问题了 —JQuery 就是这么做的

局部作用域 let

function a(){
            for(var i=0;i<100;i++){
                console.log(i);
            }
            console.log(i+1);
}
//通过调用a这个函数,得到在for循环外 i+1 还是生效的  得到101

所以需要将var全局声明关键字替换成 let 局部声明关键字

function a(){
            for(let i=0;i<100;i++){
                console.log(i);
            }
            console.log(i+1);
}
//通过调用a这个函数,得到  Uncaught ReferenceError: i is not defined

常量 const ES6新特性

使用 const去定义一个常量,不易改变

const PI='3.14';
console.log(PI);   //3.14
PI='123';          //Uncaught TypeError: Assignment to constant variable
const PI='3.14';
console.log(PI);   //3.14
PI='123';          //Uncaught TypeError: Assignment to constant variable

4.3、方法

定义方法 (关注它定义和调用)

方法就是把函数放在对象里面,对象只有两个东西:属性和方法

<script>

var chen={
    name:'cc',
    brith:2000,
    age:function(){
        //今年-出生那年
        var now=new Date().getFullYear();
        return now-this.brith;
    }
}
</script>

//属性   chen.name     得到 cc
//方法   chen.age()    注意:方法调用要带()

这里的this代表的是什么?拆开代码分开来看,将function()函数放到上面去

<script>
function getAge(){
  var now=new Date().getFullYear();
  return now-this.brith;
}

var chen={
    name:'cc',
    brith:2000,
    age:getAge
}
</script>
//chen.age()   得到21
//getAge()     NAN   即 Not A Number   因为this是window里使用,没有去调用chen里的brith

this是无法指向,是默认指向调用它的那个对象;

apply 这个是所有函数都可以调用的,作用在于 在js中可以控制this的指向,但在狂神视频中感觉讲的很乱,有兴趣了解即可

5、内部对象

标准对象
typeof 123
"number"
typeof '123'
"string"
typeof true
"boolean"
typeof NaN
"number"
typeof []
"object"
typeof Math.abs
"function"
typeof undefined
"undefined"

5.1、Date

基本使用

now.getFullYear() //年      当前是2021年  得到  2021 
now.getMonth();   //月 0~11 当前是7月, 所以得到  6
now.getDate();    //日      当前是7月7日   得到  7
now.getDay();     //星期几   当前是星期3    得到  3
now.getMinutes(); //秒                   得到  31
now.getSeconds(); //分钟                 得到  43         
now               //日期时间  Wed Jul 07 2021 11:31:43 GMT+0800 (中国标准时间)
now.toDateString();//日期    "Wed Jul 07 2021"
now.toGMTString();//世界时间  "Wed, 07 Jul 2021 03:31:43 GMT"
now.toLocaleString();//本地时间  比如现在是下午的2点57   所以得到  "2021/7/7下午2:57:07"
now.getTime();    //时间戳                得到 1625628703959
console.log(new Date(1625628703959));//  得到 Wed Jul 07 2021 11:31:43 GMT+0800 (中国标准时间)

5.2、JSON

json是什么
  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在JavaScript一切皆为对象,任何JS支持的类型都可以使用JSON来表示;

  • 对象使用: { }

  • 数组使用: [ ]

  • 所有的键值对 都使用: key:value

JSON字符串和 对象 的转换

//对象user
var user={
name:"chen",
age:20,
sex:"男"
}
console.log(user)  //得到
    {name: "chen", age: 20, sex: "男"}
    age: 20
    name: "chen"
    sex: "男"
    __proto__: Object


//将对象转换为json字符串       stringify转换
var jsonuser=JSON.stringify(user);
console.log(jsonuser)  //得到    {"name":"chen","age":20,"sex":"男"}


//将json字符串转换为json对象    parse解析
var obj=JSON.parse(jsonuser);
console.log(obj);  //得到
    {name: "chen", age: 20, sex: "男"}
    age: 20
    name: "chen"
    sex: "男"
    __proto__: Object

注意 JSON 和 JS对象的区别

var obj={a:'hello',b:'helloworld'};
var json={"a":"hello","b":"helloworld"}

5.3、Ajax (了解即可)

  • 原生的js写法 xhr异步请求
  • JQuey封装好的方法 $("#name").ajax("")
  • axios请求

6、面向对象编程

原型对象

JavaScript、Java、C++、C# …均为面向对象语言,而 JavaScript有点不同

类:模板 原型对象

对象:具体的实例

原型:”__ proto __“ (仅做了解,因为这个不好用所以 JS 才选择JAVA的class类继承

    var user={
        name:"chen",
        age:20,
        sex:"男",
        run:function(){
        console.log(this.name+"run...");
        }
    }

   
    var xiaoming={
    name:"xiaoming"
    }

    //小明的原型指向了user
    xiaoming.__proto__=user;
此时 xiaoming.run();  //得到xiaomingrun...


    var bird={
        fly:function(){
        console.log(this.name+"fly...");
        }
    }
    //小明的原型指向了user
    xiaoming.__proto__=bird;
此时 xiaoming.fly();  //得到xiaomingfly...
此时再 xiaoming.run();   //得到Uncaught TypeError: xiaoming.run is not a function  at <anonymous>:1:10

Class类继承

class关键字,是在ES6引入的

1.定义一个类,属性,方法

2.集成

//定义一个学生的类,实际上就是类似上面的模板
class Student{
        constructor(name){
            this.name=name;
        }
        hello(){
            alert("hello")
        }
    }
var xiaoming=new Student("xiaoming");   //定义一个变量,这里定义完就可以去调用了
var xiaohong=new Student("xiaohong");   //定义一个变量,这里定义完就可以去调用了
xiaoming.hello();     //得到一个弹窗  hello
xiaohong.hello();     //得到一个弹窗  hello

class pupil extends Student{
    constructor(name,grade){
    super(name);
    this.grade=grade;
    }
    myGrade(){
    alert("我是一个小学生")
    }
}

var xiao=new pupil("xiao",3);
console.log(xiao);    //得到 pupil {name: "xiao", grade: 3}
xiao.myGrade();       //得到一个弹窗  我是一个小学生

本质:查看对象原型

可以看到这个pupil类继承了Student类,他的原型就是Student

而原型链:指的就是这些类是一个 圆环状的原型,最终还是到object

在这里插入图片描述

7、操作BOM对象(重点)

浏览器

JavaScript 和 浏览器的关系 =》 JavaScript诞生就是为了让它在浏览器中运行!

BOM:浏览器对象模型

  • IE 6~11
  • Chrmoe
  • Safari
  • FixFox …

window窗口
window 对象 是浏览器的顶级对象,它具有双重角色,代表浏览器窗口

  • 它是 JS 访问浏览器窗口的一个接口
  • 它是一个全局对象。定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法
// 定义在全局作用域中的变量会变成window对象的属性
var num = 10;
console.log(window.num);
// 10

// 定义在全局作用域中的函数会变成window对象的方法
function fn() {
    console.log(11);
}
console.fn();
// 11
————————————————
原文链接:https://blog.csdn.net/Augenstern_QXL/article/details/115406408

window.alert(1);
window.innerHeight;
window.innerWidth;
等等
alert(11);    也可以省略 window

7.2、Navigator (了解)

Navigator 对象 封装了浏览器的信息, 但是大多数不会使用,因为容易被人为修改,不建议使用(了解即可)

7.3、Screen

screen 对象 代表屏幕的尺寸

screen.height    //1080 px
screen.width     //1920 px

7.4、Location & URL补充知识 (重点)

7.41、URL

统一资源定位符(uniform resouce locator)

url 的一般语法格式为:
protocol://host[:port]/path/[?query]#fragment

http://www.itcast.cn/index.html?name=andy&age=18#link
组成说明
protocol通信协议 常用的http,ftp,maito等
host主机(域名) www.itheima.com
port端口号,可选
path路径 由零或多个'/'符号隔开的字符串
query参数 以键值对的形式,通过&符号分隔开来
fragment片段 #后面内容 常见于链接 锚点

7.42、location对象属性

location对象属性返回值
location.href获取或者设置整个URL
location.host返回主机(域名)
location.port返回端口号,如果未写返回空字符串
location.pathname返回路径
location.search返回参数
location.hash返回片段 #后面内容常见于链接 锚点

7.43、location对象方法

location对象方法返回值
location.assign()跟href一样,可以跳转页面(也称为重定向页面)
location.replace()替换当前页面,因为不记录历史,所以不能后退页面
location.reload()重新加载页面,相当于刷新按钮或者 f5 ,如果参数未true 强制刷新 ctrl+f5

location 对象 代表当前页面的URL信息 (重要)

location   //可以得到以下
href: "https://www.baidu.com/",
origin: "https://www.baidu.com"
protocol: "https:"
host: "www.baidu.com"
//以上
location.reload();    //重新加载当前网页

loaction.assign('https://www.csdn.net/');  //直接从当前网页跳转到csdn

7.5、Document (重点)

document 对象 代表当前的页面 ,HTML DOM文档树

document.title;    //得到对应的网站title,如当前页面是百度    "百度一下,你就知道"

可以获取具体的文档树节点, 所以后面也可以动态的删除和控制节点

<body>

<dl id="app">
    <dt>JAVA</dt>
    <dt>JAVASE</dt>
    <dt>JAVAEE</dt>
</dl>

<script>
    var dl=document.getElementById('app');
</script>

</body>

获取cookie (前端获取的方式) (网页cookie就是客户端的一些信息,这些信息会发送给服务器)

document.cookie
"Hm_lvt_eefa59dfd5fb29fcc57a8b2437ad5ab1=1621585476; Hm_lpvt_eefa59dfd5fb29fcc57a8b2437ad5ab1=1621589418; CCT_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHAiOiJvcHBvLW10biIsInN1YiI6Ilc5MDA1MTc2IiwiaXNzIjoiVEdULTI1MzM1MTMtRnkwT3l5ZzUyNndJZGdkQmp3SXBNNVl4WFk5UjRkZmtSV1NqVmhTdjY0YVhTRE9KeUwtU0lBTSIsIm5hbWUiOiJTSUFNVEdUIiwidHlwZSI6IlRHVCIsImlhdCI6MTYyNTU1MzkyNn0.oHHN3nCFSc4E36R3h_e7hN4mudrGAfn3TQFiipKgPJk"

劫取cookie原理

www.taobao.com

<script src="aa.js"></script>
<!--恶意的人员,获取你的cookie上传到他的服务器,隐私就没了,或者会伪造一个假的cookie-->

服务器端可以设置 cookie:httpOnly

7.6、History

history 代表浏览器的历史记录

history.forward();    //向前
history.back();	      //退后
history.go(x);        // x为1时表示向前1页  ,x为-1时表示向后1页   正数x向前x页,负数x向后退x页

8、操作DOM对象(重点)

DOM:文档对象模型 Document Object Model

它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格。

核心:整个浏览页就是一个DOM树形结构!

  • 更新DOM节点
  • 遍历得到DOM节点
  • 删除一个DOM节点
  • 增加一个DOM节点

而要操作一个DOM节点,首先就要先获取这个DOM节点

8.0、获得节点

获得DOM节点

<body>

<h1>标题一</h1>

<p id="p1">p1</p>
<p class="p2">p2</p>

<div id="father">
    <h1>标题</h1>
    <p id="p0">p0</p>
    <p class="pp">pp</p>
</div>

<script>
    var h1=document.getElementsByTagName('h1');
    var p1=document.getElementById('p1');
    var p2=document.getElementsByClassName('p2');
    var father=document.getElementById('father');

    var children=father.children;//获取父节点下的所有子节点
    //father.firstChild  //找到父类第一个节点
    //father.lastChild   //找到父类最后一个节点
</script>
</body>

这是原生得代码,后面学习使用 JQuery()

8.1、更新节点

更新节点

<body>
<div id="id1">
</div>

<script>
    var id1=document.getElementById('id1');
    id1.innerText='123';
</script>
</body>

更新操作文本

  • id1.innerText=‘123’; 修改文本的值(其实也是往空白的页面里加一个文本123)
  • id1.innerHTML=’< strong>123</ strong> ’ 可以解析HTML文本标签

操作 CSS,即直接在当前页面改样式

步骤: 1.先找到对应的元素,并将它赋给一个变量 2.通过变量去做自己要做的操作

var search=document.getElementById('su');    //例如在百度网页,可以看到id为su的"百度一下",id是唯一的,所以直接获取
search.style.color='yellow';      //改颜色
search.style.fontSize='20px';     //改大小
search.style.padding='2em';       //改框的大小

8.2、删除节点

删除节点

步骤: 1.先获取父节点 2.再通过父节点删除自己

<div id="father">
    <h1>标题</h1>
    <p id="p1">不相关的标签p1</p>
    <p class="pp">不相关的标签pp</p>
</div>

<script>
var self=document.getElementById('p1');     //先把自己的节点 赋值标记
var father=p1.parentElement;                //通过标记将父值 再赋值
father.removeChild(self);                   //这里就把 不相关的标签p1  给删除了

father.removeChild(father.removeChild[0]); //因为childern是时刻变化的,所以不能这么操作
father.removeChild(father.removeChild[1]);
father.removeChild(father.removeChild[2]);
</script>

注意:删除多个节点的时候,children是在时刻变化的,删除节点的时候一定要注意

8.3、插入节点

插入节点 将原来某个节点移到另外一个节点去

<body>
    
<p id="js">JavaScript</p>

<div id="list">
    <p id="se">JAVASE</p>
    <p id="ss">JAVASS</p>
    <p id="me">JAVAME</p>
</div>

<script>
    var js=document.getElementById('js');
    var list=document.getElementById('list');
    list.appendChild(js);  //将上面的id为js的节点移到list标签里去
</script>

</body>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4x1vQFMc-1625822509789)(C:\Users\W9005176\AppData\Roaming\Typora\typora-user-images\image-20210709153636975.png)]可以看到 原本在

外面的

JavaScript

标签被移到了里面

8.4、创建节点

创建节点 即创建一个新的节点 createElement 实现插入

<body>

<p id="js">JavaScript</p>

<div id="list">
    <p id="se">JAVASE</p>
    <p id="ss">JAVASS</p>
    <p id="me">JAVAME</p>
</div>

<script>
    var js=document.getElementById('js');
    var list=document.getElementById('list');
    list.appendChild(js);

    var num=document.createElement('p');   //1.先创建一个标签
    num.id='newP';						   //2.给这个标签id
    num.innerText='hello,world!';		   //3.给这个标签加内容 TEXT、HTML...
    list.appendChild(num);				   //4.再把这个标签放到对应的标签下
</script>

在这里插入图片描述

9、操作表单(验证)

表单是什么 可以联想到-- form标签 DOM 树

  • 文本框 text
  • 下拉框 < select >
  • 单选框 radio
  • 多选框 checkbox
  • 隐藏框 hidden
  • 密码框 password

表单的目的: 提交信息

获得提交的信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>操作表单</title>
</head>

<body>

<form method="post">
    <p>
    <span>用户名:</span>
    <input type="text" id="username">
    </p>

    <!--多选框的值,就是定义好的value-->
    <p>
        <span>性别:</span>
        <input type="radio" id="boy" name="sex" value="man"><input type="radio" id="girl" name="sex" value="woman"></p>
</form>

<script>
    var input_username=document.getElementById('username');   //定义上面数据里id为 username的变量名
    var boy_radio=document.getElementById('boy');             //定义上面数据里id为 boy的变量名
    var girl_radio=document.getElementById('girl');           //定义上面数据里id为 girl的变量名

    //通过下面可以得到输入框的值
    input_username.value;

    //通过这个可以给输入框赋值
    input_username.value='123';

    //对于单选框,通过判断checked,来取得当前的值
    boy_raido.checked;  								//查看返回的结果,是否为true  如果是true,则为选中

    gril_radio.checked;  								//同理

</script>

</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提交表单 验证 —从输入账号密码到跳转至baidu,密码适用md5加密,并且无法在后台看到

<!--表单绑定提交时间
onsubmit =绑定一个提交检测的函数, true, false
将这个结果返回给表单,适用onsubmit 接收!

即 onsubmit="return aa()"
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>提交表单</title>
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>

<form action="https://www.baidu.com/" method="post" onsubmit="return aa()">
    <P> <span>用户名:</span> <input type="text" id="username" name="username">  </P>
    
    <p> <span>密码:</span> <input type="password" id="password">  </p>
    

    <input type="hidden" id="md5-password" name="password">

    <!--绑定事件 onclick 被点击-->
    <button type="submit">提交</button>

</form>

<script>

    function aa(){
        alert(1);
        var uname=document.getElementById('username');
        var pwd=document.getElementById('password');
        var md5pwd=document.getElementById('md5-password');
		//pwd.value=md5(pwd.value);    加上这个可以看到在提交密码的时候,密码会突然变长, 用户体验不好
        
        md5pwd.value=md5(pwd.value);
        //可以校验判断表单内容,true就是通过提交,false就是阻止提交
        return true;
    }
</script>

</body>
</html>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值