JavaScript

1、什么是JavaScript

1.1概述

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

Java、JavaScript

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

1.2历史

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

最先版本已经到es6版本

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

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

2、快速入门

2.1引入JavaScript

1.内部引入

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

2.外部引入

abs.js

//...

test.html

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

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
   <!--script标签内,写js代码-->
   <!--外部引入-->
   <!--script必须成对出现-->
   <script src="js/qjjs.js"></script>
   <!--不用显示定义type-->
   <script type="text/javascript" ></script>
</head>
<body>

</body>
</html>

2.2基本语法入门

浏览器必备调试须知

image-20210119213341583

调试网站 调试js 打断点 网络 应用

2.3数据类型

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

变量

var 

number

js不区分小数和整数,Number

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

字符串

’abc ‘ “abc”

布尔值

true,false

逻辑运算

&& 同真则真
|| 一个为真,结果为真
真即假,假即真

比较运算符 !!!重要

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

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

须知:

  • NaN===NaN,这个与所有的数值都不相等,包括自己

  • 只能通过isNaN(NaN)来判断这个数是否是NaN

 

浮点数问题:

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

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

console.log(Math.abs(1/3-(1-2/3))<0.00001)

null和undefined

  • null 空

  • undefined未定义

数组

java的数组必须是一系列相同类型的对象,js中不需要这样

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

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

undefined

对象

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

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

var person = {
  name:'lcj',
   age : 3,
   tags:['1999','js']
   
}

2.4严格检查模式

<!--
前提idea需要设置es6语法
use strict;严格检查模式,预防
javaScript的随意性导致产生的一些问题
局部变量建议都使用let去定义
-->
<script>
   'use strict';
   //全局变量
   let i=1;
   //ES6 let
</script>

3、数据类型

3.1、字符串

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

2、注意转义字符\

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

3、多行字符串编写

//tab 上面 esc键下面
var msg = `
nihao
lcj
wshi
shuaige
`

4、模板字符串

let name = 'lichengjei';
let age = 3;
//tab 上面 esc键下面
let msg = `你好,${name}`

5、字符串长度

image-20210120175753945

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

image-20210120175813088

7.大小写转换

//注意,这里是方法,不是属性
student.toUpperCase()
student.toLowerCase()

8、student.indexOf(‘t’)

9、substring

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

3.2数组

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

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

1.长度

arr.length

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

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

arr.indexOf(2)
1

字符串的“1”和数字1是不同的

3、slice()截取Array的一部分,返回一个新数组,类似与String中的substring

image-20210120202634258

4、push、pop 尾部

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

image-20210120202842454

5、unshift(),shift()头部

image-20210120203213847

6、排序sort()

image-20210120203355375

7、元素反转 reverse()

image-20210120203506841

8、concat()

image-20210120203558987

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

9、链接符join

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

image-20210120203722455

10、多维数组

image-20210120203812077

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

3.3、对象

若干个键值对

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

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

1.对象赋值

image-20210120205955664

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

person.haha
undefined

3.动态的删减属性

delete person.score
true
person

image-20210120210149324

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

image-20210120210358403

5.判断属性值是否在这个对象中,xxxinxxx!

'age' in person
true
//继承
undefined
'toString'in person
true

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

person.hasOwnProperty("toString")
false

3.4流程控制

if判断

var age=3;
if (age>3){
    alert("haha")
}else {
    alert("kuwa~")
}

循环

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

for循环

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

forEach数组循环

age.forEach(function (value){
    console.log(value)
})

for...in

/*
for(var index in object){}
*/
for (var num in age){
    console.log(age[num])
}

3.5Map和Set

Map:

image-20210120213855924

var map = new Map([['tom',100],['jack',90],['haha',80]])
var name = map.get('tom');//通过key获得value
map.set('make',123);
console.log(name);

Set:无序不重复的集合

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

3.6、iterator

es6新特性

使用iterator来遍历迭代我们的Map,Set!

遍历数组

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

遍历Map

var map = new Map([[3,4],[5,6],[7,8]]);
for (let x of map) {
    console.log(x)
}

遍历Set

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

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

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

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

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

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

arguments

arguments是一个js免费赠送的关键字

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

function abs(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

以前:

for (var i=0;i<arguments.length;i++){
    console.log(arguments[i])
}

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

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

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

image-20210122152220267

4.2变量的作用域

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

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

function lcj()
{
    var x = 1;
    x = x + 1;
}
x=x+2;//Uncaught ReferenceError

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

     function lcj()
        {
            var x = 1;
            x = x + 1;
        }
        function ll()
        {
            var x = "a";
            x = x + 1;
        }

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

function lcj()
{
    var x = 1;
    //内部函数可以访问外部函数的成员,反之则不行
    function ll()
    {
        x = x + 1;
    }
    x = x + 1;
}

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

function lcj()
{
    var x = 1;
    //内部函数可以访问外部函数的成员,反之则不行
    function ll()
    {
       var x = 2;
    }
   ll()
}
lcj()

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

提示变量的作用域

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

结果:xundefined

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

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

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

function lcj(){
var x = 1,y=x+1,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();

//old_alert(x)

  window.alert = function (){};
  //发现alert()失效了
  window.alert(1233)
  //恢复
  window.alert = old_alert;
  window.old_alert(456)

js实际上只有一个全局作用域,任何变量(函数也可以视为变量),结舍没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到报错‘refrence Error’

规范

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

//唯一全局变量
var LcjApp={};
//定义全局变量
LcjApp.name  = 'lcj';
LcjApp.app = function (a,b){
    return a+b;
}

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

jQuery

局部作用域 let

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

ES6let关键字,解决局部作用域冲突的问题

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

建议用let去定义局部作用域的变量;

常量 const

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

let PI = '3.14';

console.log(PI);
PI = '213';//可以修改
Console.log(PI);

在es6之后引入了常量关键字 const

const PI = "3.14";
console.log(PI)

4.3方法

定义方法

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

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

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

function getage () {
    //今年-出生的年
    var now = new Date().getFullYear();
    return now - this.bitrh;
}
var xiguapi = {
    name:'李昊',
    bitrh:2000,
    //方法
    age:getage
}
//xiguapi.age()成功
//getage() NaN

apply 在js中可以控制this指向!

function getage () {
    //今年-出生的年
    var now = new Date().getFullYear();
    return now - this.bitrh;
}
var xiguapi = {
    name:'李昊',
    bitrh:2020,
    //方法
    age:getage
}
//xiguapi.age()成功
//getage() NaN
getage.apply(xiguapi,[])

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

基本使用

var now = new Date();
now.getFullYear()//年
now.getMonth()//月  0~11代表月
now.getDate()//日
now.getDay()//星期几
now.getHours()//时
now.getMinutes()//分
now.getSeconds()//秒

now.getTime();//时间戳 全时间统一
console.log(new Date(1611307823543))//时间戳转为时间

转换

now.toLocaleString()//注意,调用是一个方式,不是一个属性
"2021/1/22 下午5:32:14"
now.toGMTString()
"Fri, 22 Jan 2021 09:32:14 GMT"

5.2JSON

JSON是一种轻量级的数据交换模式。

简洁和清晰的层次结构使得JOSN成为理想的数据交换语言

易于人阅读和编写,同时也易于机器解析和生成,并有效的提升网络传输效率。

 

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

格式

  • 对象都用{}

  • 数组都用{}

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

JSON字符串和js对象的转化

let user = {
    name:"lihao",
    age:3,
    sex:"男"
}
//对象转化为json字符串
let  jsonuser= JSON.stringify(user)
//json字符串转化为对象 参数为json 字符串
let obj=JSON.parse('{"name":"lihao","age":3,"sex":"男"}')

很多人搞不清楚,json和js对象的区别

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

6.面向对象编程

6.1什么是面向对象

js、Java、c#。。。。面向对象:js有些区别

  • 类:模板

  • 对象:具体的实例

在js这个需要大写换一下思维

原型

let user = {
    name:"lihao",
    age:3,
    sex:"男",
    run: function () {
        console.log(this.name+"run...")
    }
}
var xiaoming={
    name: "xiaoming"
}

//小明的原型时user
//原型对象
xiaoming.__proto__=user;
function Student(name) {
    this.name = name;
}
//student新增一个方法
Student.prototype.hello = function () {
    alert("hello")
}

class继承

class关键字,实在es6引入的

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

//定义一个学生的类
class Student{
    constructor(name) {
        this.name = 'lcj'
    }
    hello(){
        alert("hello")
    }
}
    var xiaoming = new Student("xiaoming")
    var xiaohong = new Student("xiaohong")
    xiaohong.name="wss"
    console.log(xiaohong)

    xiaohong.hello()

2、继承

class Student{
    constructor(name) {
        this.name = name
    }
    hello(){
        alert("hello")
    }
}
class xiaoStudent extends Student{
    constructor(name,age) {
        super(name)
        this.age=age;
    }
    myGrade(){
        alert('我时')
    }
}
var xiaoming = new Student("xiaoming")
var xiaohong = new Student("xiaohong")
xiaohong.name="wss"
console.log(xiaohong)

xiaohong.hello()

本质

image-20210122204706208

原型链

7.操作BOM对象(重点)

浏览器介绍

JavaScript和浏览器的关系?

js的诞生就是为了能够在浏览器中与运行!

BOM:浏览器的对象模型

  • IE 6~11

  • Chrome

  • Sadari

  • FireFox

  • Opera

三方

  • QQ浏览器

  • 360浏览器

  • 搜狐浏览器

window

window代表 浏览器窗口

window.innerHeight
714
window.innerWidth
152
window.outerHeight
832
window.outerWidth
712

Navigator

Navigator,封装了浏览器的信息

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

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

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

screen

代表屏幕尺寸

screen.width
1536
screen.height
864

location(重要)

location代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/"
protocol: "https:"
reload:f reload()//刷新网页
//设置新的地址
location.assign("www.wwww.com")

document

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

document.title
"李昊很帅"

获取具体的文档是节点

<body>
<dl id="app">
    <dt>Java</dt>
    <dd>javaSE</dd>
    <dd>javaEE</dd>
</dl>

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

获取cookie

document.cookie

劫持cookie原理

<script src="aa.js></script>
//恶意人员:获取到你的cookie上传到他的服务器

服务端可以设置cookie:httpOnly

history

history.back//前进
ƒ back() { [native code] }
history.forward//后退
ƒ forward() { [native code] }

8、操作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;//获得父节点下的所有子节点

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

更新节点

<div id="id1">

</div>


<script>
    let id1 = document.getElementById('id1')
    id1.innerText='aaw'
</script>
  • id1.innerText='456'修改文本的值

  • id1.innerHTML='《strong》123《/strong》' 可以解析HTML文本标签

操作css

id1.style.color='red'//属性使用 字符串 包裹
id1.style.fontSize='20px'// - 转驼峰命名问题
id1.style.padding = '2em'

删除节点

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

<div id="father">
    <h1>标题一</h1>
    <p id="p1"></p>
    <p class="p2"></p>
</div>
var p1 = document.getElementById('p1')
var father = p1.parentElement;//获得父类的节点
father.removeChild(p1)//调用方法通过父节点,删除自己
father.children//获得父类下的全部子节点
//删除是一个动态的过程:
father.removeChild(father.children[0])
father.removeChild(father.children[1])
father.removeChild(father.children[2])

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

插入节点

我们获得了某个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`)
        list=document.getElementById('list')
        list.appendChild(js);//追加节点
</script>

效果:

image-20210123154009217

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

var newP = document.createElement('p');
newP.id='newP';
newP.innerText = '我是新创建的节点'
list.appendChild(newP)
   //创建一个新的标签节点  通过这个属性。可以设置任意一个值
let myScript = document.createElement('script');
myScript.setAttribute('type','type/javascript')
<script>
    var
        js =document.getElementById(`js`)
        list=document.getElementById('list')
        list.appendChild(js);//追加节点

        var newP = document.createElement('p');
        newP.id='newP';
        newP.innerText = '我是新创建的节点'
    //创建一个新的标签节点
    let myScript = document.createElement('script');
    myScript.setAttribute('type','type/javascript')
    //创建一个style标签
    let myStyle=document.createElement(`style`)//创建了一个空style标签
    myStyle.setAttribute('type','text/css')
    myStyle.innerHTML='body{background-color: darkcyan;}';//设置标签内容

    document.getElementsByTagName('head')[0].appendChild(myStyle)//将标签放到头部里
</script>

insertBefore

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

9、操作表单(验证)

表单是什么 from Dom树

  • 文本框 text

  • 下拉框 <select>

  • 单选框 radio

  • 多选框 chrckbox

  • 隐藏域 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>
  let input_text= document.getElementById(`username`)
  let boy_text=document.getElementById('boy')
  let girl_radio = document.getElementById('girl')

  //得到输入框的值
  input_text.value
  //修改输入框的值
  input_text.value='123'
  //对于单选框,多选框等等固定的值,boy_radio,value只能取到当前的值
  boy_text.checken;//查看返回的结果,是否为true 如果为true 则被选中
</script>

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

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

<script>
    function aaa() {
            var uname = document.getElementById(`username`)
            var pwd = document.getElementById('password')
            var md5pwd = document.getElementById('md5-password')

            md5pwd.value = md5(pwd.value)
            //我们可以校验判断表单内容,true就是通过提交,false,组织提交
    }
</script>

10、jQuery

javaScript

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

获取jQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body>
<!--
公式:$(selector选择器).action()
-->
<a href="" id="test-jquery">点我</a>

<script>
    document.getElementById('id');
    //选择器就是css选择器
    $('#test-jquery').click(function () {
        alert("hello jquery")
    })
</script>
</body>
</html>

选择器

<script>
    //标签
    document.getElementsByTagName()
    //id
    document.getElementById()
    //类
    document.getElementsByClassName()

    //jQuery css中的选择器都能用
    $('p').click()//标签选择器
    $('#id1').click()//id选择器
    $('.class1').click()//class选择器·
</script>

文档工具站

事件

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.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=pythom]').text();//获得值
$('#test_ul').html();//获得值
$('#test_ul li[name=pythom]').text('设置值');//设置值
$('#test_ul').html(<h1>123<h1>)//设置值

css的操作

$('#test_ul li[name=python]').css("color",'red')

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

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

image-20210123204818482

技巧

  1. 如何巩固js(看jQery源码,看游戏源码)

  2. 巩固HTML css(扒网站 全部down下来,然后对应修改看效果)

posted @ 2021-01-23 21:43  酷酷的西瓜皮  阅读(105)  评论(0)    收藏  举报