JavaScript整合笔记

1.1、JavaScript介绍

什么是JavaScript

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

ECMAScript

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

1.2、JavaScript使用

引入JavaScript

1.内部标签

<script> alert('hello,world'); </script>

2.外部引入

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

js文件

<!--弹窗--> alert('hello,world');

1.3、基本语法入门

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script>
       // 1.定义变量  变量类型  变量名  =  变量值;
       var score = 71;
       //alert(num)
       // 2.条件控制
       if (score>60 && score<70 ){ //成绩大于60小于70
           alert("60~70")
       }else if (score>70 && score<80){
           alert("70~80") //弹窗
       }else{
           alert("other") //结束
       }
    </script>

</head>
<body>

</body>
</html>

浏览器必备调试须知

1.4、数据类型(入门)

数值,文本,图形,音频,视频...

变量

变量不能以数字开头和以下符号开头,$和_可以

 number

js不区分小数和整数,number

1  //整数
1.5 //浮点数
1.5e5 //科学计数法
-99 //负数
NaN  // not a number

字符串

'666 '  

"666"

布尔值

true 
false

逻辑运算

&& //与,两个都为真,结果为真 
|| //或,一个为真,结果为真 
! //非,真即假,假即真

比较运算符

=    赋值符号
==   等于   (类型不一样,值一样,也会判断为true)
===  绝对等于 (类型一样,值一样,结果为true)

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

通过isnan(nan) 来判断这个数是否是nan

浮点数问题

<script>
    console.log((1/3)== (1-2/3))
</script>

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

<script>
console.log(Math.abs(1/3-(1-2/3))<0.00000001)
</script>

 null(空指针)和undefined

null 空

undefined 未定义

//保证代码的可读性,尽量使用 []
var arr = [1,2,4,5,6,'hello',true,null] 
new Array(1,2,3,4,5,6,'hello');

 取数组下标,如果越界了,就会undefined

 对象

对象是大括号,数组是中括号

每个属性之间使用逗号隔开,最后一个不需要添加

//java的写法:bubbles bubbles = new bubbles
var bubbles = { //javascript的写法
     name: "彬哥",
     age: 18,
     tags: ['js','ssm','mysql','...']

}

1.5、严格检查模式strict

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>严格检查模式strict</title>
</head>
<body>
  <script>
      //使用strict严格检查模式,预防随意性的问题,必须写在第一行
      'use strict' //放上代码报错有提示,放下代码报错无提示
       //全局变量
       let i = 1; //补充残缺的语句
      //ES6 let
  </script>
</body>
</html>

1.6、数据类型

字符串

正常字符串我们使用单引号' ',或者双引号" "包裹

注意转义字符\

\'
\n
\t
\u4e2d   Unicode字符
\x41  Ascll字符

多行字符串编写

var msg = `hello
world
bubbles`b

模板字符串

let name = '彬哥'; 
let age = 3; 
let msg = `你好,${name}`

 字符串长度

console.log(src.length)

 字符串的可变性,不可变

var bubbles = 'you'
undefined
bubbles[0] = 1
1
console.log(bubbles)
you

大小写转换

//大写
console.log(bubbles.toUpperCase())
//小写
console.log(bubbles.toLowerCase()))

获取指定的下标

console.log(bubbles.indexOf('e'))

截取

console.log(bubbles.substring(1)) //从第一个字符串截取到最后一个字符串
console.log(bubbles.substring(1,3)) //[1,3)

数组

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

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

长度

arr.length //长度

注意:加入给arr.length赋值,数组大小就会发生变化~,如果赋值过小,元素就会丢失。

indexOf,通过元素获得下标索引

arr.indexOf(2) 
1

字符串的"1"和数学1是不同的

slice() 截取Array的一部分,返回一个新数组,类似于String中subString

arr.slice(2,3)

push()、pop()

push:压入到尾部

arr
(5) [1, 2, 3, 4, 5]
arr.push('a','b') //压入到尾部
7
arr
(7) [1, 2, 3, 4, 5, 'a', 'b']

pop:弹出尾部的一个元素

arr.pop //弹出尾部的一个元素

unshift(),shift()头部

unshift: 压入到头部

var arr = [1,2,3,4,5,6]
undefined
arr.unshift('a','b')  //压入到头部
8
arr
(8) ['a', 'b', 1, 2, 3, 4, 5, 6]

shift: 弹出头部的一个元素

arr.shift() //弹出头部一个元素

排序sort

arr
(4) ['b', 'c', 'd', 'a']
arr.sort() //排序
(4) ['a', 'b', 'c', 'd']

元素反转reverse

arr.sort()
(4) ['a', 'b', 'c', 'd']
arr.reverse() //元素反转
(4) ['d', 'c', 'b', 'a']

concat

(4) ['d', 'c', 'b', 'a']
arr.concat(1,2,3)
(7) ['d', 'c', 'b', 'a', 1, 2, 3]
arr
(4) ['d', 'c', 'b', 'a']

注意:concat并没有修改数组,只是会返回一个新的数组

连接符join

打印拼接

var bubbles = [1,2,3,4,5]
undefined
bubbles.join('-')
'1-2-3-4-5'

多维数组

var arr = [[1,2],[3,4],[5,6]]
undefined
arr
(3) [Array(2), Array(2), Array(2)]
0: (2) [1, 2]
1: (2) [3, 4]
2: (2) [5, 6]
length: 3
arr[1][1]
4

填充fill

arr.fill(1)

总结

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

对象

若干个键值对

var 对象名 = {
 属性名: 属性值,
 属性名: 属性值,
 属性名: 属性值
}
//定义了一个person对象,它有四个属性!
 var score = {
      name: "bubbles",
      age: 18,
     email:'2019882328@qq.com',
     score: 0
}

js中的对象,{.....}表示一个对象,键值对描述属性xxxx;xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号!

javascript中的所有的键都是字符串,值是任意对象!

对象赋值

score.name = '彬哥' 
'彬哥' 
score.name 
'彬哥'

使用一个不存在的对象属性,不会报错!undefined

score.haha //值是瞎写的,不存在 
undefined

动态的删减属性

delete score.name 
true

动态的添加,直接给新的属性添加值即可

score.bubbles = '彬哥' //自定义 
'彬哥'

判断属性值是否在这个对象中! xxx in xxx!

'age' in score 
true 
'toString' in score 
true

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

score.hasOwnProperty('age')
true //有
score.hasOwnProperty('ssm')
false //没有

流程控制

if判断

var score = 3
  if (score>3){  //判断1
      alert('hehe')
  }else if (score<5){ //判断2
      alert('wawu~')
  }else{ //否则
      alert('wawu~')
  }

while循环,避免程序死循环

var score = 3
while (score<100){
    score = score+1
    console.log(score)
}

dowhile循环,避免程序死循环

var score = 3
do{
    score = score+1
    console.log(score)
}while(score<100)

for循环

for (let i = 0; i <100 ; i++) {
  console.log(i)
}

forEach循环 5.1

var bubbles =[1,2,45,66,3,7,7,9]
bubbles.forEach(function (value){
    console.log(value)
    })

for...in

var bubbles =[1,2,45,66,3,7,7,9]
//函数
 for(var num in bubbles){
    if (bubbles.hasOwnProperty(num)){
        console.log('存在')
        console.log(bubbles[num])
    }

Map和Set

ES6新特性

Map

//ES6,Map
//学生的姓名、成绩
var map = new Map([['xiaobin',100],['bubbles',90],['xiao',60]]);
var name = map.get('xiaobin')
map.set('admin',123456)  //添加和修改
map.delete('xiao')//删除
console.log(name)

Set

去除重复的值

//Set,去除重复的值
var set = new Set([1,2,1,1,3]);
 console.log(set)

var set = new Set([1,2,1,1,3]);
set.add(2) //添加
set.delete(1) //删除
console.log(set.has(3)) //是否包含某个元素


iterator迭代

遍历数组

var a = [1,2,3]
for (let x of a) {
   console.log(x)
}

遍历Map

var map = new Map([['bubbles',100],['小明',90],['小美',89]]);
for(let you of map){
    console.log(you)
}

遍历Set

//遍历Set
var set = new Set([1,2,3,4,5,6]);
for (let et of set){
    console.log(et)
}

1.7、函数

定义函数

定义方式一

绝对值函数

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

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

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

定义方式二

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

function(x){......}这是一个匿名函数。

但是可以把结果赋值给you(自定义),通过you(自定义)就可以调用函数!

方式一和方式二等价!

调用函数

abs(10) //10
abs(-10) //10

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

参数进来是否存在的问题?

假设不存在参数,如何规避?

function you(x){
    if(typeof x!=='number'){ //手动添加异常
        throw 'Not a Number'
    }
    if(x>=0){
         return x;  
    }else{
        return  -x;
    }
}

arguments

arguments是javascript免费赠送的关键字;

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

var abs = function(x){

    console.log("x=>"+x);
    for (var i = 0; i<arguments.length;i++){
      console.log(arguments[i]);
    }
    if (x>=0){
        return x;
    }else{
        return -x;
    }
}

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

需要排除已有的参数~

rest

以前

if(arguments.length>2){
  for (var i = 2;i<arguments.length;i++){
      
  }
}

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

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

rest参数只能写在最后面,必须用...标识。

变量的作用域

在javascript中,var定义变量实际是有作用域的。

假设在函数体中声明,则在函数体外不可以使用~

function f() {
    var x = 1;
    x= x+1;
}
x= x+2;

如果两个函数使用了相同的变量名

function f() {
    var x = 1;
    x= x+1;
}
function f2() {
    var x = 'a';
    x= x+1;
}

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

function f() {
    var x = 1;
}
//内部函数可以访问外部函数的成员,反之则不行
function f2() {
  var y =  x +1;
}
var z = y+1; //Uncaught ReferenceError: y is not defined

假设,内部函数变量和外部函数的变量,重名!

function f() {
  var x = 1;

  //内部函数可以访问外部函数的成员,反之则不行
  function f2() {
    var x = 'a';
    console.log('inner' + x) //outer1
  }
  console.log('outer' + x) //innera
  f2()
}
f() //调用

假设在javaScript中函数查找变量从自身函数开始~,由’内‘向‘外’查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

提升变量的作用域

function f(){
    var x = 'x'+y;
    consloe.log(x)
    var y = 'y';
}

 说明:javascript执行引擎,自动提升了y(自定义)的声明,但是不会提升变量y(自定义)的赋值;

function fa2(){
    var y;
    var x = 'x'+1
    console.log(x)
    y =  'y'
}

这个是在javaScript建立之初就存在的特性。养成规范:所有的变量定义都放在函数的头部,不要乱放,便于代码维护;

function fa2(){
    var x = 1
        y = x+1
        z,i,a;//undefined
}

全局函数

var  x =1
function f() {
    console.log(x)
}
f()
console.log(x)

全局对象window

var x = 'xxx';
alert(x);
alert(window.x) //默认所有的全局变量,都会自动绑定在window对象下。

alert这个函数本身也是一个window 变量;

var x = 'xxx';
window.alert(x)
var old_alert = window.alert;
window.alert = function (){

};
//发现alert失效了
window.alert(123)

//恢复
window.alert = old_alert;
window.alert(456)

javascript 实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错 RefrenceError

规范

由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,冲突~ >如何能够减少冲突?

//唯一全局变量
var bubbles = {}

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

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题~

局部作用域let

function f() {
    for (var i = 0; i <100 ; i++) {
        console.log(i)
    }
    console.log(i+1) // i 出了这个作用域还能使用
}

 ES6 let 关键字,解决局部作用域冲突问题!

function f() {
     for (let i = 0; i <100 ; i++) {
         console.log(i)
     }
     console.log(i+1) // i 出了这个作用域还能使用
 }

 建议大家都是用let去定义局部作用域的变量;

常量 const

在ES6之间,怎么定义常量;只有用全部大写字母命名的变量就是常量,建议不要修改这样的值

var  PI = '3.14'
console.log(PI)
PI = 123  //修改变量
console.log(PI)

在ES6引入了常量关键字const

const PI  = '3.14' //只读变量,不能修改
onsole.log(PI)
PI = 123 //修改变量
console.log(PI)

方法

定义方法

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

var bubbles  = {
  name : '彬哥',
  bitrh: 2003, //出生日期
  //方法
  age: function () {
     //今年 - 出生的年
    var on = new Date().getFullYear();
    return on-this.bitrh
  }
}

 this代表什么?拆开代码试试

function x () {
  //今年 - 出生的年
  var on = new Date().getFullYear();
  return on-this.bitrh
}
'use strict'//使用严格检查模式
var bubbles  = {
  name : '彬哥',
  bitrh: 2003, //出生日期
  //方法
  age: x

}

apply

在js中可以控制this指向!

function x () {
  //今年 - 出生的年
  var on = new Date().getFullYear();
  return on-this.bitrh
}
'use strict'//使用严格检查模式
var bubbles  = {
  name : 'bubbles',
  bitrh: 2020, //出生日期
  //方法
  age: x

}
var  binge  = {
  name : '彬哥',
  bitrh: 2003, //出生日期
  //方法
  age: x
}
x.apply(bubbles,[]) //this,指向对象参数为null

1.8、内部对象

标准对象

typeof 123
'number'
typeof '123'
'string'
typeof true
'boolean'
typeof NaN
'number'
typeof []
'object'
typeof {}
'object'
typeof Math.abs
'function'
typeof undefined
'undefined'

Date

基本使用

var date = new Date();//当前时间
date.getFullYear()  //年
date.getMonth() //月  0~11 代表月
date.getDate() //日
date.getDay() //星期几
date.getHours() //时
date.getMinutes() //分
date.getSeconds() //秒
date.getTime() //时间戳,全世界统一
console.log(new Date(1650866500836))//通过时间戳,获取当前时间

转换

date.toLocaleString()
'2022/4/25 14:01:40'
date.toGMTString()
'Mon, 25 Apr 2022 06:01:40 GMT'

JSON

json是什么

早期,所有数据传输习惯使用XML文件!

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

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

格式

对象都用{}

数组都用[]

所有键值对都是用key:value

var user = { //对象
  name :'binge',
  age:18,
  sex:'男'
}
//对象转化为json字符串,{name: 'binge', age: 18, sex: '男'}
var jsonuser = JSON.stringify(user)

var user = { //对象
  name :'binge',
  age:18,
  sex:'男'
}
//json字符串转化为对象参数为json字符串
var obj = JSON.parse('{"name":"binge","age":18,"sex":"男"}')

JSON和JS对象的区别

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

1.9、面向对象

原型对象

javascript..java.....面向对象,javascript有些区别!

类:模板 原型对象

对象:具体的实例

原型继承

var Student  ={
   name:'xiaoming',
    age:18,
    run:function (){
       console.log(this.name+'在学习...')
    }
};
var bubbles = {
    name: '彬哥'
};
//泡泡的原型指向鸟(继承)
bubbles.__proto__ = Student;

function f(name) {
  this.name = name;
}
//给f新增一个方法
f.prototype.hello = function (){
  alert('hello')
};

class继承

class关键字,是在ES6引入的

定义一个类,属性、方法

//ES6
class Class {
   //构造器
   constructor(name) {
     this.name = name;
   }
   hello(){
     alert('hello')
   }
}
var c1 = new Class('bubbles');
var c2 = new Class('彬哥');

继承

<script>
    //ES6
    class Class {
       //构造器
       constructor(name) {
         this.name = name;
       }
       hello(){
         alert('hello')
       }
    }
    //继承
    class pupil extends Class{
       constructor(name,grade) {
         super(name);
         this.grade = grade;
       }
       mygrade(){
           alert('pupil')
       }
    }
    var c1 = new Class('bubbles');
    var c2 = new Class('彬哥');
    var c3 = new pupil('(*Φ皿Φ*)',11);

</script>

本质:查看对象原型

原型链

 __proto__

2.0、BOM对象

浏览器介绍

JavaScript和浏览器关系?

JavaScript诞生就是为了能够让他在浏览器运行!

BOM:浏览器对象模型

  1. IE6~11
  2. Chrome
  3. Safari
  4. FireFox

三方

  1. QQ浏览器
  2. 360浏览器

window

window代表浏览器窗口

window.alert('我是神') //弹窗显示
windew.innerHeight    //内高
windew.innerwidth  //内宽
window.outerHeight  //外高
window.outerwidth //外宽

Navigator(不建议使用)

Navigator封装了浏览器的信息

navigator.appName //名字
'Netscape' //网景浏览器
navigator.appVersion  //当前浏览器的版本
'5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50'
navigator.userAgent //用户代理
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50'
navigator.platform //站台
'Win32'
...

大多数时候,我们不会使用navigator对象,因为会被人为修改!

不建议使用这些属性来判断和编写代码

screen

代表屏幕尺寸

screen.width //屏幕宽度
145px
screen.height //屏幕高度
376px

location

location代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/s?wd=q%27q&ie=utf-8&tn=54093922_22_hao_pg"
protocol: "https:"
reload: ƒ reload() //刷新网页

//设置新的地址
location.assign('https://blog.csdn.net/BubblesMusic?type=blog')

document

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

document.title
'百度一下,你就知道'
document.title = '彬哥一下,你就知道' //改名
'彬哥一下,你就知道'

获取具体文档树节点

<dl id="app">
      <dt>Java</dt>
      <dd>JavaScript</dd>
</dl>

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

获取cookie

document.cookie

劫持cookie原理

淘宝网 - 淘!我喜欢

<script src ='aa.js'></script>

恶意人员:获取你的cookie上传到的服务器,例如你打开两大购物网站淘宝和天猫,
通过手机号登录淘宝,天猫也自动登录了 

服务器端可以设置cookie: httpOnly

history(不建议使用)

history,代表浏览器的历史记录

history.forward() //前进 
history.back()  //后退

2.1、操作DOM对象(重点)

浏览器网页就是一个DOM树形结构!

  1. 更新:更新DOM节点
  2. 遍历DOM节点:得到DOM节点
  3. 删除:删除一个DOM节点
  4. 添加:添加一个新的节点

要操作一个DOM节点,就必须要先获得这个DOM节点

获取DOM节点

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM</title>
</head>
<body>
   <!--节点 -->
   <div id="ceiling">
       <h1>我是帅哥</h1>
       <p id="p1">p1</p>
       <p class="p2">p2</p>
   </div>



<script>
       <!--获得节点 -->
     var h1 = document.getElementsByTagName('h1')
     var p1 = document.getElementById('p1')
     var p2 = document.getElementsByClassName('p2')
     var ceiling = document.getElementById('ceiling')

     var childrens = ceiling.children[index]; //获取父节点下的所有子节点
       // ceiling.firstChild
       // ceiling.lastChild

</script>

</body>
</html>

这是原生代码,之后都是用jQuery

更新节点

操作文本

au.innerText = '456' //修改文本的值
au.innerHTML = '<strong>34323</strong>' //可以解析HTML文本标签

注意:会覆盖原先的数据

操作CSS

au.style.color = 'rgba(255,173,173,0.5)'
au.style.fontStyle = '20px'
au.style.padding = '2em'
...

 删除节点

删除节点步骤:先获取父节点,在通过父节点删除自己

<div id="app">
  <h1>我是帅哥</h1>
  <p id="p2">p2</p>
</div>
<script>
 var p2 = document.getElementById('p2')
 var app = document.getElementById('app');
 app.removeChild(p2) //删除节点
 app.removeChild(app.children[0])
</script>

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

插入DOM节点

我们获得了某个Dom节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM

追加

<p id="js">javascript</p>
<div id="you">
     <p id="se">javase</p>
     <p id="ee">javaee</p>
     <p id="me">javame</p>
</div>

<script>
  var js = document.getElementById('js')
  var you = document.getElementById('you')
</script>

you.appendChild(js) //追加放置底部

创建一个新标签,实现插入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="" type="text/css">
    <script type="text/javascript" src=""></script>
</head>
<body>
    <p id="js">javascript</p>
    <div id="you">
         <p id="se">javase</p>
         <p id="ee">javaee</p>
         <p id="me">javame</p>
    </div>
    <script>
      var js = document.getElementById('js')
      var you = document.getElementById('you')
      //通过js创建一个新的节点
      var newP = document.createElement('p')
      newP.id = 'newP'
      newP.innerText  = 'Hello,bubbles';
      ///创建一个标签节点(通过这个属性,可以设置任意的值)
      var myScript = document.createElement('script');
      myScript.setAttribute('type','text/javascript')
    </script>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
    <p id="js">javascript</p>
    <div id="you">
         <p id="se">javase</p>
         <p id="ee">javaee</p>
         <p id="me">javame</p>
    </div>

    <script>
      var js = document.getElementById('js')
      var you = document.getElementById('you')

      //通过js创建一个新的节点
      var newP = document.createElement('p')
      newP.id = 'newP'
      newP.innerText  = 'Hello,bubbles';

      ///创建一个标签节点(通过这个属性,可以设置任意的值)
      var myScript = document.createElement('script');
      myScript.setAttribute('type','text/javascript');

      var mystyle = document.createElement('style'); //创建一个空style标签
      mystyle.setAttribute('type','text/css');
      mystyle.innerHTML = 'body{background-color:chartreuse;}'; //设置标签内容
      document.getElementsByTagName('head')[0].appendChild(mystyle)

    </script>

</body>
</html>

 

insertBefore

 <p id="js">javascript</p>
 <div id="you">
      <p id="se">javase</p>
      <p id="ee">javaee</p>
      <p id="me">javame</p>
 </div>

<script>
var ee = document.getElementById('ee')
var js = document.getElementById('js')
var you = document.getElementById('you')

//要包含的节点,insertBefore(newNode,targetNode)
you.insertBefore(js,ee)
</script>

2.2、操作表单(验证)

表单是什么 form DOM 树

  1. 文本框 text
  2. 下拉框 <select>
  3. 单选框 radio
  4. 多选框 checkbox
  5. 隐藏框 hidden
  6. 密码框 password
  7. ......

表单的目的:提交信息

获取要提交的信息

//得到输入框的值
username.value()
//修改输入框的值
username.value() = '123'

单选框

girl_radio.value
'lu'
boy_radio.value
'nan'

单选框只能读取当前选中的值

单选框选中的值

girl_radio.checked
true
boy_radio.checked
false

选中为true,没选中为false

指定赋值选中的值

girl_radio.checke = true
boy_radio.checked = true

 

测试

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

<form action="post">
  <div>
      <span>用户名</span><input type="text" name="username" id="username" placeholder="请输入用户名" >
  </div>

    <div>性别
        <input type="radio" name="sex" value="nan" id="boy"> 男
        <input type="radio" name="sex" value="lu" id="girl" > 女
    </div>
    
    <div>
        <input type="submit" value="登录">
        <input type="reset" value="重置">
    </div>
</form>

  <script>
       var username = document.getElementById('username');
       var boy_radio = document.getElementById('boy');
       var girl_radio = document.getElementById('girl')

      // 单选框只能读取当前选中的值
       // //得到输入框的值
       username.value
       //修改输入框的值
       username.value = '123'

      //单选框选中的值,选中为true,没选中为false
       girl_radio.checked
       boy_radio.checked

       //指定赋值选中的值
       girl_radio.checke = true
       boy_radio.checked = true


  </script>
</body>
</html>

MD5

工具类

<!--MD5工具类 -->
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>

使用

//MD5算法
password.value = md5(password.value);

提交表单,md5加密密码,表单优化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>提交表单</title>
  <!--MD5工具类 -->
  <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<!--表单绑定提交事件,onsubmit
绑定一个提交检测的函数,true,false将结果返回给表单,使用onsubmit接收
 -->
<form action="https://www.baidu.com/" method="post" onsubmit="return f()">
  <p>
    账号 <input type="text"  value="" name="username" id="username" title="输入账号" maxlength="10" required size="15" placeholder="请输入账号">
 </p>
  <p>
    密码 <input type="password"  value="" id="input-password" title="输入密码" maxlength="*" required size="15" placeholder="请输入密码">
  </p>
  <input type="hidden" id="md5-password" name="password">
   <!-- 绑定事件 -->
  <button type="submit" >登录</button>

  <input type="reset" value="重置">

</form>
<script>

  function f() {
    alert('登录成功')//弹窗提示
    var username = document.getElementById('username');
    var pwd = document.getElementById('input-password');
    var md5pwd = document.getElementById('md5-password');

    //MD5加密
    md5pwd.value = md5(pwd.value);
    return true;
  }

</script>
</body>
</html>

2.3、jQuery

初始JQuery

JavaScript

JQuery库,里面存在大量的javascript函数

在线CDN JQuery(百度)

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>

 获取jquery,测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始JQuery</title>
    <!--在线jdn jquery -->
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>

<a href="" id="text-jquery">点我试试</a>

<!--jquery公式$(#).#() -->
<script>
    document.getElementById('id');
    $('#text-jquery').click(function (){
        alert('hello,jquery')
    })
</script>
</body>
</html>

JQuery选择器

js和jquery的对比

//原生js
//标签选择器
document.getElementsByTagName()
//类选择器
document.getElementsByClassName()
//id选择器
document.getElementById()

//jquery
$('id').click() //标签选择器
$('.class').click() //类选择器
$('#id').click() //id选择器

JQuery事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery事件</title>
  <!--在线jdn jquery -->
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>

  <style>
    #divMode{
      /*高宽*/
      height: 600px;
      width: 600px;
      /*边框*/
      border: 5px solid  red;
    }
  </style>
</head>
<body>
mouse:<span id="mouseMode"></span>

<div id="divMode">
  在这里移动鼠标试试
</div>

<script>
  //当网页元素加载完毕之后,响应事件
  //$(document).ready(function () {})
  $(function () {
     $('#divMode').mousemove(function (e){
       $('#mouseMode').text('x:'+e.pageX+'y:'+e.pageY)
     })
  });
</script>
</body>
</html>

JQuery操作DOM元素

操作DOM

节点文本操作

 $('#test-ui li[name=python]').text(); //获得值
'javascript'
 $('#test-ui li[name=python]').text('设置值'); //设置值
 $('#test-ui').html(); //获得值
 $('#test-ui').html('设置值'); //设置值

css操作

$('#test-ui li[name=python]').css('color','red') //文字颜色
$('#test-ui li[name=python]').css('background','red') //背景颜色

元素的显示和隐藏:本质display : none;

$('#test-ui li[name=python]').show() //显示
$('#test-ui li[name=python]').hide() //隐藏

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值