JavaScript学习

什么是JavaScript

概述

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

java,JavaScript

一个合格的后端人员,必须要精通JavaScript

历史

JavaScript的起源故事_杨校的博客-CSDN博客_javascript 的故事

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

最新版本已经到es6版本

但是,大部分浏览器还是只停留在支持es5代码上

开发环境---线上环境,版本不一致

快速入门

引入JavaScript

内部标签

<script>

        //....

</script>

外部引入

abc.js

//...

test.html

<script scr="abc.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

<!--    script标签内,写JavaScript代码-->
<!--    <script>-->
<!--        alert('hello,world');-->
<!--    </script>-->

<!--    外部引入-->
<!--    注意:script标签必须成对出现-->
    <script src="js/qj.js" ></script>

<!--    不用显示定义类型,也默认就是javaScript-->
    <script type="text/javaScript" ></script>

</head>
<body>

<!--这里也可以存放-->
</body>
</html>

基本语法入门

<!--    JavaScript严格区分大小写-->
    <script>
        //1.定义变量    变量类型 变量名=变量值;
        var score=67;
        // alert(num);
        //2.条件控制
        if(score>60 && score<70){
            alert("60~70");
        }else if (score>70 && score<80){
            alert ("79~80");
        } else {
            alert ("other");
        }

        //console.log(score) 在浏览器的控制台打印变量 System.out.println();
        /**
         *hajdkl
         * */
    </script>

浏览器必备调试须知:

 数据类型

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

变量

var 王者荣耀="倔强青铜";

number

js不区分小数和整数,Number

123  //  整数123

123.1  //  浮点数123.1

1.23e3  //  科学计数法

-99  //  负数

NaN  //  not a number

Infininty  //  表示无限大

字符串

'abc'

"abc"

布尔值

true

false

逻辑运算

&&        两个都为真,结果为真

||        一个为真,结果为真

!        真即假,假即真

比较运算符!!!!重要

=        

==        等于(类型不一样,值一样,也会判断为true)

===        绝对等于(类型一样,值一样,结果为true)

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

须知:

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

浮点数问题:

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

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

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

null和undefined

  • null 空
  • undefined 未定义

数组

java的数组必须是相同类型的对象,JS中不需要

//保证数组的可读性。尽量使用[]
var arr=[1,2,3,4,5,'hello',null,true];

new Array (1,2,3,4,5,'hello');

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

undefined

对象

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

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

//Perosn person=new Person();
      var person={
          name:"my",
          age:3,
          tags:['js','java','web','...']
      }

取对象的值

person.name
>'my'
person.age
>3
person.tags
>(4) ['js', 'java', 'web', '...']

严格检查格式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--
  前提:IDEA需要设置支持ES6语法
  'use strict':严格检查模式,预防JavaScript的随意性导致产生的一些问题
  必须写在JavaScript的第一行
  局部变量建议都是用let去定义
-->
  <script>
    'use strict';
    //全局变量
    let i=1;
    //ES6 let
  </script>
</head>
<body>

</body>
</html>

 数据类型

字符串

1.正常字符串我们使用 单引号 或者 双引号 包裹

2.注意转义字符\

\'

\n

\t

\4e2d        中        \u####        unicode字符

\x41        A        Ascll字符

3.多行字符串编写

//tab 上面 esc下面 
var msg= 
    `hello 
    world 
    你好`

4.模板字符串

//tab 上面 esc下面 
let name="my";
let age=3;
let msg=`你好呀,${name}`

5.字符串长度

console.log(student.length)

6.字符串的可变性,不可变

 7.大小写转换

//注意这里是方法,不是属性了
console.log(student.toUpperCase())//大写
console.log(student.toLowerCase())//小写

8.console.log(student.indexOf('t'))

9.substring

[)

student.substring(1)//从第一个字符串截取到最后一个字符串

student.substring(1,3)//[1,3)

数组

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

var arr=[1,2,3,4,5,6]//通过下标取值和赋值
arr[0]
arr[0]=0;

1.长度

arr.length

注意,假如给arr.length赋值,数组大小就会发生变化;如果赋值过小,元素就会丢失

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

arr.indexOf(2)
1

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

3.slice()       

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

4.push(),pop()        尾部

push():压入到尾部

pop():弹出尾部的一个元素

5.unshift(),shift()        头部

unshift():压入到头部

shift():弹出头部的一个元素

6.排序        sort()

arr

(3) ['B', 'C', 'A']
arr.sort()
(3) ['A', 'B', 'C']

7.元素反转        reverse()

arr
(3) ['B', 'C', 'A']
arr.sort()
(3) ['A', 'B', 'C']
arr.reverse()
(3) ['C', 'B', 'A']

8.concat()

(3) ['C', 'B', 'A']
arr.concat([1,2,3])
(6) ['C', 'B', 'A', 1, 2, 3]
arr
(3) ['C', 'B', 'A']

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

9.连接符        join()

打印拼接数组,使用特定的字符串连接

(3) ['C', 'B', 'A']
arr.join('-')
'C-B-A'

10.多维数组

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

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

对象

若干个键值对

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

        属性名:属性值,

        属性名:属性值
}

//定义了一个person对象,它有四个属性

var person={

        name:"my",

        age:3,

        email:"1743255367@qq.com",

         score:0

}

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

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

1.对象赋值

person.name="yezi"
'yezi'
person.name
'yezi'

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

person.haha
undefined

3.动态的删减属性,通过delete删除对象的属性

delete person.name
true
person

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

person.hahaha="hahaha"
'hahaha'
person

5.判断属性值是否在对象中!        xxx in xxx

'age' in person
true

//继承

'toString' in person
true

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

person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true

流程控制

if判断

var age=3;
    if(age>3){//第一个判断
      alert ("hahah");
    }else if(age==3){//第二个判断
      alert ("kuku");
    }else {//否则
      alert ("kuwa~");
    }

while循环,避免程序死循环

while(age <100){
  age =age +1;
  console .log (age )
}

do{
  age =age +1;
  console .log (age )
}while(age <100)

for循环

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

forEach循环

5.1引入的

var age=[21,324,245,211,543,6754];

//函数
age.forEach (function (value) {
    console .log (value)
})

for...in循环

//for(var index in object){}
for (var num in age ){
    if(age .hasOwnProperty (num )){
        console .log ("存在")
        console .log (age [num])
    }
}

Map和Set

ES6的新特性

Map:

//SE6
// 学生的成绩,学生的名字
// var names=["tom","jack","haha"];
// var scores=[100,90,80];

var map=new Map ([["tom",100],["jack",90],["haha",80]]);
var score=map .get ("tom");//通过key获得value
map .set ("admin",2378);//新增或修改
map .delete ("tom");//删除

Set:无序不重复的集合

set .add (4);//添加
set .delete (1);//删除
console .log (set .has (3));//是否包含某个元素

iterator

ES6的新特性

遍历数组

//通过for of /for in 下标
var arr=[3,4,5];
for(var x of arr){
    console .log (x);
}

遍历map

var map=new Map ([["tom",100],["jack",90],["hahaa",80]]);
for(let x of map ){
    console .log (x);
}

遍历set

var set=new Set ([5,4,3]);
for(let x of set ){
    console .log (x);
}

函数

函数的定义和参数获取

定义方式一

绝对值函数

function abs(x){
        if(x>=0){

                return x;
        }else{

                return -x;

        }
}

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

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

定义方式二

var abs=function(x){

        if(x>0){

 6               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免费赠送的关键字;

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

var abs=function(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;
  }

}

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

rest

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

以前:

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

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

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

  console .log (rest );
}

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

变量的作用域

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

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

function qj(){
  var x=1;
  x=x+1;
}
x=x+2;//Uncaught ReferenceError: x is not defined

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

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

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

function qj(){
  var x=1;

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

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

function qj(){
  var x=1;

  function qj2(){
    var x='A';
    console .log ('inner'+x);//innerA
  }
  console .log ('outer'+x);//outer1
  qj2 ();
}
qj();

假设在javascript中,函数查找变量从自身函数开始,由“内”向“外”查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

提升变量的作用域

function qj(){
  var x="x"+y;
  console .log (x);
  var y='y';
}
qj();

结果:xundefined

说明:js执行引擎,自动提升了y的声明,但是不会提升y的赋值

等价于

function qj2(){
    var y;
    var x="x"+y;
    console .log (x);
    y='y';
  }

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

function qj2(){
  var x=1,
          y=x+1,
          z,i;//undefined
  //之后随意用
}

全局函数

//全局变量
var x=1;
function f(){
  console .log (x);
}
f();
console .log (x);
</script>

全局对象Window

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

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

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

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

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

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

规范

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

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

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

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

jQuery

局部作用域let

function aaa(){
   for (var i = 0; i < 100; i++) {
     console .log (i);
   }
   console .log (i+1);//问题?i出了这个作用域还可以使用
 }

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

function aaa(){
 for (let i = 0; i < 100; i++) {
   console .log (i);
 }
 console .log (i+1);//Uncaught ReferenceError: i is not defined
}

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

常量const

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

var PI='3.14';
console .log (PI );
PI ='123';//可以改变这个值
console .log (PI );

在ES6引入了常量关键字'const'

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

方法

定义方法

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

var my={
    name:'晔子',
    birth:2020,
    //方法
    age : function () {
        //今年-出生的年
        var now=new Date().getFullYear() ;
        return now -this.birth;
    }
}
//属性
my.name
//方法,一定要带()
my.age()

this.代表什么?拆开上面的代码看看

function getAge() {
    //今年-出生的年
    var now=new Date().getFullYear() ;
    return now -this.birth;
}
var my={
    name:'晔子',
    birth:2020,
    age : getAge
}

//my.age() ok
//getAge() NaN Window

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

apply

在JS中可以控制this指向

ction getAge() {
    //今年-出生的年
    var now=new Date().getFullYear() ;
    return now -this.birth;
}
var my={
    name:'晔子',
    birth:2020,
    age : getAge
}

//my.age() ok

getAge .apply (my,[]);//this指向了my,参数为空

内部对象

标准对象

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 now=new Date();//Thu Sep 22 2022 10:01:56 GMT+0800 (中国标准时间)
now.getFullYear ();//年
now.getMonth ();//月 0-11
now.getDate ();//日
now.getDay ();//星期几
now.getHours ();//时
now.getMinutes ();//分
now.getSeconds ();//秒

now.getTime ();//时间戳 全世界统一 1970 1.1 0:00:00 毫秒数
console.log(new Date(1663812641797));//时间戳转为时间

转换

now=new Date(1663812641797)
Thu Sep 22 2022 10:10:41 GMT+0800 (中国标准时间)
now.toLocaleString//注意,调用是一个方法,不是一个属性
ƒ toLocaleString() { [native code] }
now.toLocaleString()
'2022/9/22 10:10:41'
now.toGMTString()
'Thu, 22 Sep 2022 02:10:41 GMT'

JSON

json是什么

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

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

在javascript中一切皆为对象,任何JS支持的类型,都可以用JSON表示,number,string

格式:

  • 对象都用{}
  • 数组都用[]
  • 所有的键值对都用 key:value

JSON字符串和JS对象的转化

var user={
name:"my",
age:3,
sex:'男'
}

//对象转换为JSON字符串  {"name":"my","age":3,"sex":"男"}
var jsonUser=JSON .stringify (user );

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

很多人搞不清楚,JSON和JS对象的区别

var obj={a:'hello',b:'hellob'}

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

Ajax

原生的js写法 xhr 异步请求

jQuey 封装好的方法 $("#name").ajax("")

axios 请求

面向对象编程

原型对象

javascript,java,c#...面向对象;javascript有一些区别!

  • 类:模板 原型对象
  • 对象:具体是实例

在javascript中,这个需要大家换一下思维方式

原型:

var Student={
name:"my",
age:3,
run :function () {
    console .log (this.name +"run...")
}
}

var xiaoming={
  name:"xiaoming"
};
//小明的原型是Student
//原型对象
xiaoming ._proto_=Student ;

var Brid={
  fly:function () {
      console .log (this .name+"fly...")
  }
};
xiaoming ._proto_=Brid ;
function Student(name) {
  this.name=name;
}
//给Student新增一个方法
Student .prototype .hello=function () {
  alert ('hello');
};

class继承

class关键字,是在ES6引入的

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

//定义一个学生的类
class Student{
  constructor(name) {
    this.name=name;
  }
  hello(){
    alert ('hello');
  }
}

var xiaoming =new Student ("xiaoming");
var xiaohong =new Student ("xiaohong");
xiaoming.hello()

2、继承

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

  var xiaoming =new Student ("xiaoming");
  var xiaohong =new XiaoStudent ("xiaohong",1);

本质:查看对象原型

 原型链

__proto__:

操作BOM对象

浏览器介绍

javascript和浏览器的关系?

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

BOM:浏览器对象模型

  • IE6~11
  • Chrome
  • Safari
  • FireFox

第三方浏览器

  • QQ浏览器
  • 360浏览器

window(重要)

window代表浏览器窗口

window.alert(1)
undefined
window.innerHeight
609
window.innerWidth
741
window.outerHeight
680
window.outerWidth
1280

//大家可以调整浏览器窗口试试

Navigator

Navigstor,封装了浏览器的信息

navigator.appName
'Netscape'
navigator.appVersion
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42'
navigator.userAgent
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42'
navigator.platform
'Win32'

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

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

screen

代表屏幕尺寸

screen.height
720px
screen.width
1280px

location(重要)

location代表当前页面的URL信息

host: "www.baidu.com"//主机

href: "https://www.baidu.com/"//当前指向的位置

protocol: "https:"//协议

reload: ƒ reload()//刷新网页

//设置新的地址

location.assign("https://mp.csdn.net/mp_blog/creation/editor/126822285")

document

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

document.title
'百度一下,你就知道'
document.title="yezi"
'yezi'

获取具体的文档树节点

<dl id="app">

        <dt>Java</dt>

        <dd>JavaSE</dd>

        <dd>JavaEE</dd>

</dl>

<script>

        var dl=document .getElementById ('app');

</script>

获取cookie

document.cookie
''

劫持cookie原理

www.taobao.com

<script src="aa.js"><\script>

<!--恶意人员:获取你的cookie上传到他的服务器-->

服务器端可以设置cookie:httpOnly

history(不建议使用)

history代表浏览器的历史记录

history.forward()//前进

history.back()//后退

操作Dom对象(重点)

DOM:文档对象模型

核心:

整个浏览器就是一个DOM树形结构

  • 更新:更新Dom节点
  • 遍历DOM节点:得到DOM节点
  • 删除:删除一个DOM节点
  • 添加:添加一个新的DOM节点

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

获取DOM节点

//对应css选择器

var h1=document .getElementsByTagName ('h1');

var p1=document .getElementById ('p1');

var p2=document .getElementsByClassName ('p2');

var father=document .getElementById ('father');

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

// father .firstChild

// father .lastChild

这是原生代码,之后我们尽量都是用JQuery();

更新Dom节点

<div id="id1" >

</div>

<script>

var id1=document .getElementById ('id1');

<\script>

操作文本:

  • id1.innerText='123'修改文本的值
  • id1.innerHTML='<strong>123<\strong>'可以解析HTML文本标签

操作css

id1.style.color='red';//属性使用 字符串 包裹

id1.style.fontSize='200px';//- 转 驼峰命名

id1.style.padding='2em';

删除Dom

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

<div id="father">
  <h1>标题一</h1>
  <p id="p1" >p1</p>
  <p class="p2" >p2</p>
</div>

<script>
    var self=document .getElementById ('p1');
    var father=self.parentElement;
    father.removeChild(self)

    //删除是一个动态的过程
    father.removeChild(father.children[0])
    father.removeChild(father.children[1])
    father.removeChild(father.children[2])
</script>

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

插入Dom节点

我们获得了某个DOM节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM节点已经存在元素了,我们就不能这么干了!会产生覆盖

追加

<p id="js">JavaScript</p>
<div id="list">
  <p id="se">JavaSE</p>
  <p id="ee">JavaEE</p>
  <p id="me">JavaME</p>
</div>

<script>
  var js=document .getElementById ('js');
  var list=document .getElementById ('list');
  list.appendChild('js');//追加到后面
</script>

效果:

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

<script>
  var js=document .getElementById ('js');//已经存在的节点
  var list=document .getElementById ('list');
  //通过JS创建一个新的节点
  var newP=document .createElement ('p');//创建一个p标签
  newP .id ='newP';
  newP .innerText ='hello,my';

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

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

insertBefore

var ee=document .getElementById ('ee');
var js=document .getElementById ('js');
var list=document .getElementById ('list');
//要包含的节点.insertBefore(newNode,targetNode);
list.insertBefore (js,ee);

操作表单(验证)

表单是什么 from DOM树

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

表单的目的:提交信息

获得要提交的信息

<form action="post">
  <p>
    <span>用户名:</span> <input type="text" id="username">
  </p>
<!--  多选框的值,就是定义好的value值-->
  <p>
    <span>性别:</span>
    <input type="radio" name="sex" value="man" id="boy">男
    <input type="radio" name="sex" value="woman" id="girl" >女
  </p>
</form>

<script>
  var input_text=document .getElementById ('username');
  var boy_radio=document .getElementById ('boy');
  var girl_radio=document .getElementById ('girl');
  //得到输入框的值
  input_text.value;
  //修改输入框的值
  input_text.value='123';

  //对于单选框,多选框等等固定的值,boy_radio.value只能取得当前的值
  boy_radio.checked;//查看返回的结果,是否为true,如果为true,则被选中
  girl_radio.checked=true;//赋值

提交表单 MD5加密密码 表单优化

<!--表单绑定提交事件
onsubmit=绑定一个提交检测的函数,true false
将这个结果返回给表单,使用onsubmit接收
onsubmit="return aaa()"
-->
<form action="https://www.baidu.com/" method="post" onsubmit="return aaa()" >
  <p>
    <span>用户名:</span> <input type="text" id="username" name="username" >
  </p>
  <p>
    <span>密码:</span> <input type="password" id="input-password">
  </p>
    <input type="hidden" id="md5-password" name="password" >
<!--  绑定事件 onclick 被点击-->
  <button type="submit" >提交</button>
</form>

<script>
  function aaa() {
      alert (1);
    var uname=document .getElementById ('username');
    var pwd=document .getElementById ('input-password');
    var md5pwd=document .getElementById ('md5-password ');
    md5pwd.value=md5(pwd.value);
    //可以校验判断表达内容 true就是通过提交,false就是阻止提交
      return true;
  }
</script>

JQuery

JavaScript

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

获取JQuery

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

<!--    cdn引入-->
      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
</head>
<body>

</body>
</html>

公式:$(选择器).事件(事件函数)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    cdn引入-->
<!--      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>-->
      <script src="lib/jquery-3.6.1.min.js"></script>
</head>
<body>
<!--
    公式:$(selector).action()
-->
<a href="" id="test-jquery">点我</a>
<script>
    // document .getElementById ('test-jquery');
    //选择器就是css的选择器
    $('#test-jquery').click (function () {
        alert ('hello,JQuery');
    })
</script>
</body>
</html>

选择器

//原生的js,选择器少,不好记
//标签
document .getElementsByTagName ();
//id
document .getElementById ();
//类
document .getElementsByClassName ();

//JQuery css中的选择器全部都能用
$('p').click ();//标签选择器
$('#id1').click ();//id选择器
$('.class1').click ();//类选择器

文档工具站:

jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm (cuishifeng.cn)

事件

鼠标事件,键盘事件,其他事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script src="lib/jquery-3.6.1.min.js"></script>
  <style>
    #divMove {
      width: 500px;
      height: 500px;
      border: 1px solid red;
    }
  </style>
</head>
<body>
<!--要求:获取鼠标当前的一个坐标-->
mouse: <span id="mouseMove"></span>
<div id="divMove">
在这里移动鼠标试试
</div>

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

 操作DOM

节点文本操作

$('#test-ul li[name="python"]').text();//获得值

$('#test-ul li[name="python"]').text('设置值');//设置值

$('#test-ul').html();//获取值

$('#test-ul').html('<strong>123</strong>');//设置值

 css的操作

$('#test-ul li[name="python"]').css ('color','red');

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

$('#test-ul li[name="python"]').show();//显示

$('#test-ul li[name="python"]').hide();//隐藏

娱乐

$(window).width();

$(window).height();

$('#test-ul li[name="python"]').toggle();//隐藏与显示切换

未来ajax()

$('#from').ajax()

$.ajax({ url: "test.html", context: document.body, success: function(){         $(this).addClass("done");

}});

小技巧

  1. 如何巩固JS(看JQuery源码,看游戏源码)
  2. 巩固HTML,CSS(扒网站,全部down下来,然后对应修改看效果)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值