前四天笔记在此连接:
web前端笔记+表单练习题+五彩导航栏练习题-CSDN博客 https://blog.csdn.net/simply_happy/article/details/136917265?spm=1001.2014.3001.5502
https://blog.csdn.net/simply_happy/article/details/136917265?spm=1001.2014.3001.5502
# 1.边框弧度    div {      width: 300px;      height: 50px;      background-color: aqua;      /* border-radius: 20px; */      /* 左上  右上+左下  右下 */      /* border-radius: 10px 20px 30px 40px; */      /* 胶囊形状:盒子高度的一半 */      border-radius: 25px;      border-top-right-radius: 70px;    }## 2.盒子阴影div {      width: 100px;      height: 100px;      background-color: pink;      /* x轴的偏移量 y轴的偏移量必须写 */      /* x轴的偏移量 y轴的偏移量 模糊的半径  扩散的半径 颜色  */      box-shadow: 5px 2px 10px 10px black inset;    }## 3.文字阴影p {      text-shadow: 5px 5px 3px pink;    }## 4.列表属性li {      width: 200px;      height: 200px;      background-color: aqua;      list-style: none;      list-style-type: none;}## 5.resize    textarea {      width: 500px;      height: 60px;      resize: none;    }**<textarea name="" id="" cols="30" rows="10"**>***rows 和* cols *属性,用于声明 <textarea> 的精确尺寸***## 6.浮动.box1 {      width: 200px;      height: 200px;      background-color: aqua;      float: left;    }    /*     顶部是对齐的    脱离标准流     */    .out {      width: 800px;      height: 400px;      background-color: brown;    }    .box2 {      width: 300px;      height: 300px;      background-color: pink;      float: right;    }**float *CSS 属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,但是仍然保持部分的流动性(与绝对定位相反)。***## 7.浮动的问题**元素高度塌陷、文字环绕不正常等。以下是一些解决浮动问题的方法:**    .father {      width: 700px;      /* 1.给父盒子高度 */      /* height: 400px; */      /* float: left; */      background-color: aqua;    }    .left {      width: 300px;      height: 300px;      background-color: blue;      float: left;    }    /* p {      /* 清除浮动的影响 */    /* clear: both; */(**清除两边浮动**)    /* } */    /* p::before {      display: block;      content: "";      clear: both;    } */    .father::after {      content: "";      display: block;      clear: both;    }## 8.flex布局\* {      padding: 0;      margin: 0;    }    ul {      /* 此时ul就会变成一个弹性容器 li就是弹性盒子   。子项会默认在一行排列      主轴:默认在水平方向      测轴:默认在垂直方向      子元素可以自动挤压和延伸            */      display: flex;      width: 600px;      height: 300px;      background-color: aqua;      margin: 0 auto;    }    li {      list-style: none;      width: 100px;      height: 200px;      background-color: aquamarine;    }## 9.主轴上的对齐方式\* {      margin: 0;      padding: 0;    }    ul {      display: flex;      width: 600px;      height: 300px;      background-color: aqua;      margin: 0 auto;      /*改变主轴对齐方式 */      justify-content: flex-end;      /* 两边贴边,其余平分 */      justify-content: space-between;      justify-content: space-around;      justify-content: space-evenly;      justify-content: center;    }    li {      list-style: none;      width: 100px;      height: 200px;      background-color: aquamarine;    }## 10.侧轴的对齐方式\* {      margin: 0;      padding: 0;    }    ul {      display: flex;      width: 600px;      height: 300px;      background-color: aqua;      margin: 0 auto;      /* 侧轴 */      align-items: center;      align-items: end;      align-items: start;    }    ul li:nth-child(3) {      align-self: center;    }    li {      list-style: none;      width: 100px;      height: 200px;      background-color: aquamarine;    }## 11.修改主轴方向\* {      margin: 0;      padding: 0;    }    ul {      display: flex;      width: 600px;      height: 300px;      background-color: aqua;      margin: 0 auto;      /* 主轴方向改为垂直方向,从上到下 */      flex-direction: column;      flex-direction: row-reverse;      flex-direction: column-reverse;    }    li {      list-style: none;      width: 100px;      height: 200px;      background-color: aquamarine;    }## 12.弹性伸缩比\* {      margin: 0;      padding: 0;    }    ul {      display: flex;      width: 700px;      height: 400px;      background-color: rgb(51, 59, 59);    }    li {      list-style: none;      height: 40px;      background-color: aqua;    }    ul li:first-child {      flex: 1;      /* 整数:占用父级剩余尺寸的分数 */    }    ul li:nth-child(2) {      flex: 1;    }    ul li:last-child {      flex: 1;    }## 13.换行    \* {      margin: 0;      padding: 0;    }    ul {      display: flex;      width: 800px;      height: 400px;      background-color: aqua;      /* flex-wrap: wrap; */      justify-content: space-between;      align-content: space-evenly;    }    li {      list-style: none;      width: 170px;      height: 100px;      background-color: pink;    }## 14.grid    .box {      display: grid;      width: 500px;      height: 900px;      grid-template-columns: 1fr 2fr 1fr;      grid-template-rows: repeat(4, 100px);      /* 单元格之间的间距 */      grid-gap: 20px;    }    .box div {      border: 1px solid pink;    }    .test {      grid-column-start: 1;      grid-column-end: 3;      /* grid-row-start: 2;      grid-row-end: 4; */      grid-row: 2/5;    }## 1.透明度div{      width: 300px;      height: 200px;      background-color: black;      /**0-1  越靠近0越透明*/      opacity: 0;    }## 2.元素的显示与隐藏div{      /*opacity: 0*在页面仍存在*/      display: none;/*在页面中不在占有位置*/      visibility: hidden;/*在页面中仍然占有位置*/      visibility: visible;      width: 300px;      height: 300px;      background-color: black;    }## 3.光标的样式    a{      /* 工 */      cursor: text;      /* 手 */      cursor: pointer;      /* 十字 */      cursor: move;      /* 箭头 */      cursor: default;    }    p{      cursor: pointer;    }## 4.轮廓的样式input{      /* outline-width: 100px;      outline-color: aqua;      outline-style: solid; */      outline:  none;    }    /* 标签获取焦点的状态 */    input:focus{      outline: 1px solid blue;    }## 5.过渡    div{      width: 100px;      height: 100px;      background-color: aqua;      /* transition: all 2s; */      transition: width 2s,height 3s,background-color 4s;    }    div:hover{      width: 1000px;      height: 200px;      background-color: blanchedalmond;    }## 6.媒体查询    div{      width: 1000px;      height: 1000px;    }    /* 500-800px    800-1200px  */    @media screen  and(min-width: 500px) and (max-width:800px)     {      div{        background-color: aqua;      }    }    @media screen  and(min-width: 800px) and (max-width:1200px)     {      div{        background-color: rgb(255, 0, 153);      }    }## 7.字体@font-face {      font-family: myFont ;      src: url();    }    p{      font-family: myFont;      font-size: 30px;    }## 8.平移div{      width: 300px;      height: 200px;    }    .father{      position: relative;      border: 1px solid black;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;      /* 百分比参照的是盒子自身的尺寸      正数---x方向      正数负数都可以 */      transform: translateX(150%);      transform: translateY(-100px);      transform: translateZ();      /* transform: translate(x轴的偏移量,y轴的偏移量); */      transform: translate(200px 400px);      transform: translateX(200px)translateY(400px);        }    .father:hover .son{      transform: translate(200px 400px);    }## 9.旋转div{      width: 300px;      height: 200px;    }    .father{      position: relative;      border: 1px solid black;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;              }    .father:hover .son{      /* 旋转的单位是deg(度) */      transform: rotateZ(60deg);      transform: rotate(70deg);    }## 10.改变原点div{      width: 300px;      height: 200px;    }    .father{      margin: 0 auto;      position: relative;      border: 1px solid black;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;    }    .father:hover .son{      /* 旋转的单位是deg(度) */      /* transform: rotateZ(60deg); */      transform: rotate(70deg) rotateY(45deg);      /* transform-origin: 水平方向原点的位置   垂直方向原点的位置; */      /* 方向名词 像素 */      transform-origin: top right;      transform-origin: 100px 200px;    }## 11.多重转换div{      width: 300px;      height: 200px;    }    .father{      margin: 0 auto;      position: relative;      border: 1px solid black;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;    }    .father:hover .son{      transform: translate(100px,200px) rotateY(45deg);## 12.缩放div{      width: 300px;      height: 200px;    }    .father{      margin: 0 auto;      position: relative;      border: 1px solid black;      overflow: hidden;    }      .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;    }    .father:hover .son{      /* transform: scale(x轴的缩放  y轴的缩放); */      transform: scale(1.5,2);      transform: scale(-1);      /* 大于1表示放大的倍数 ,小于1表示缩小的倍数 */    }## 13.倾斜div{      width: 300px;      height: 200px;    }    .father{      margin: 0 auto;      position: relative;      border: 1px solid black;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;    }    .father:hover .son{      transform: skewX(45deg);    }## 14.空间转换    div{      width: 300px;      height: 200px;    }    .father{      margin: 0 auto;      position: relative;      border: 1px solid black;      /* 视距 */      perspective: 1000px;      transform: translate3d(100px 100px 200px);      transform-style:preserve-3d ;    }    .son{      transition: all 2s;      position: absolute;      top: 0;      left: 0;      background-color: blanchedalmond;    }    .father:hover .son{      transform: translateZ(100px);    }## 15.动画    /* 定义动画 */    @keyframes mymovie {      form{        width: 0;        height: 0;        background-color: rgb(249, 240, 255);      }      to{        width: 1200px;        height: 300px;        background-color: aqua;      }    }    @keyframes mymovie2{      0%{         width: 1200px;        height: 300px;        background-color: aqua;      }      25%{        width: 1200px;        height: 300px;        background-color: rgb(255, 0, 0);      }      50%{        width: 1200px;        height: 300px;        background-color: rgb(0, 255, 98);      }      /* .... */    }    /* animmation 复合属性:动画名称 动画花费时间 */    div{      animation: mymovie 3s;      animation-duration: 3s;      /*动画延迟  */      animation-delay: 3s;      /* 执行完毕时的状态  */      animation-fill-mode: forwards;      /* 速度曲线 */      animation-timing-function: steps(40);      /* 重复次数 */      animation-iteration-count: 3;      /* animation-iteration-count: infinite;无限循环 */      animation: mymovie 3s ease 2s 3 reverse forwards;    }    div:hover{      /* 暂停动画 */      animation-play-state: paused;    }JavaScript:是一门弱数据类型的编程语言,实现的是人机交互的效果干嘛:1.做网页特效2,做表单验证3,是数据交互4,服务器编程5,ECMAScript(变量,数据类型,分支,循环,对象)	WebApi:Dom操作文档,Bom操作文档JavaScript的书写位置:内部JS:写在HTML里边,用<**script**>包住 写在<body**>**结束标签的前面2,外部JS代码写在.js结尾的文件中,通过变量:计算机用来存储数据的容器,盒子注意:变量指的是容器变量的基本使用:声明变量	let变量名变量赋值	变量名 = 变量值重新赋值let声明的变量,不允许重复声明let声明多个变量let age1=21,age2=12var和let区别:1,var可以重复声明变量2,let声明的变量,不能在声明前使用3,var不存在快起作用域的概念后面声明变量使用let变量的命名规范:1,只能用有效字符(数字,字母,下划线,$)组成,并且不以数字开头2,不能使用关键字,保留字,3,js严格区分字母的大小写4,起名最好是具有意义的5,遵循小驼峰命名法数据类型:基本数据类型:numberstring:通过"" '`'包起来,都是字符串	``包起来的字符串可以进行换行字符串的拼接:+	模板字符串可以拼接字符串和变量bool: true\falseundefined:未定义类型:变量声明了,但是未赋值null引用数据类型:objectfunctionarray判断数据类型:type of 变量js是数据类型语言,他的变量类型,只有在赋值之后,才能确定.也就是说,变量赋予的变量值是什么数据类型,变量就是什么数据类型数据类型转换:隐式和显示隐式转换:+两边存在一边是字符串,则另外一边会被转换成字符串除了+,其他的算数运算符会将转换成数字类型显示转换转换为数字:Number()如果参数中出现字符,最终结果会是NAN,NAN本身也是属于number类型,不是一个数字not a numberparseInt()尽可能的将参数转化为整型parseFloat()尽可能的将参数转化为浮点转换成字符串:String()变量.toString()运算符:算术运算符:+ - * / %赋值运算符:= 	+= 	-= 	/= 	%=a+=3 =====>> a=a+3自增自减运算符i++:赋值运算符的优先级大于后++,先进行赋值运算++i:前++的优先级高于赋值运算符,先进行前加加,再进行赋值运算i--比较运算符:**> 	<	 >=	<=	 ==	===	!== **==:只会判断值是否相同===:会判断值和数据类型NAN不等于任何值,包括它自身逻辑运算符:&&	两真才真||	一真则真!	取反js:**<script> src="路径" ****</script>**prompt()let 变量名=变量值数据类型:基本数据类型	变量数据类型string().tostrong()运算符:算数运算符:
赋值运算符:= += -=一元运算符 ++ -- !a = 12 b = a++c = ++b关系运算符:> >= < <= == ===(值,数据类型都会进行比较) != !==逻辑运算符1:&& || !位移运算符:基于二进制的运算0 1原码:十进制对应的二进制反码:除了符号位之外,其余取反补码:反码+1|:两个0才为0### 1.位运算    let a = 2    let b = 3    console.log(a|b)    // 0    // &   两个1才为1        console.log(a&b)    console.log(a^b)### 2.表达式和语句    // 表达式:是一组代码的集合    let x = 7    3+4    x++    // 语句:if  js的命令    // alert()### 3.if-else语句// 顺序,选择,循环    // 顺序:代码默认的自上到下,从左到右    // 选择(分支):面对不同的条件,执行不同的代码    // 条件只要最终返回的是布尔值就可以    // if(条件){    //   // 满足条件时执行的代码    // }    // else{}    // 条件不满足时,执行的代码    // let age = Number(prompt("请输入你的年纪:"))    // if (age>18){    //   console.log("成年了");    // }    // else{    //   console.log("一边玩去");    // }    // else if(条件2){    //   条件2满足时执行的代码    // }### 4.三元运算符    // 条件?   满足条件时执行的代码:不满足条件时执行的代码    // let age = 21    // age > 18 ? console.log("成年"):console.log("小孩")    // let a=2,b=3    // c=a>b ? a : b    // console.log(c)    let a = +prompt("输入一个数")    a=a < 10  ? "0"+a : a    console.log(a)### 5.switch语句// switch(数据){case 值1:代码  case 值2:代码  default:代码}    let day = prompt("请输入今天星期几:")    switch(day){      case "1":        alert("今天星期一")        break      case"2":        alert("今天星期二")        break      case"3":        alert("今天星期三")        break      case"4":        alert("今天星期四")        break      case"5":        alert("今天星期五")        break      case"6":      case"7":        alert("今天周末")        break      default:        alert("error")    }### 6.断点调试1.断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug
2.断点调试是程序员必须掌握的技能。
3.断点调试也能帮助我们查看java底层源代码的执行过程,提高程序员的Java水平### 7.循环// 循环:某一段代码重复执行    // while    // *    // while(循环条件){循环体  }    // 变量的初始值    // let i = 1    // // 终止条件    // while(i<=10){    //   console.log(i)    //   // 初始值变化    //   document.write(i)    //   i++    // }    let i=1,n=1,sum1=0,sum2=0    while(i<=100){      sum1=sum1+i      i++    }    while(n<=100){      if(n%2 === 0 ){        sum2=sum2+n      }            n++    }    console.log(sum1)    console.log(sum2)### 8.break,continue    let i = 1    while(i<10){      if(i===4){        // break        //终止掉距离自己最近的一层循环        i++        continue        // 跳出本次循环      }      console.log(i)      i++    }### 1.dowhile语句    let i = 1    do{      console.log("hello world")      i++      // 不管条件是否成立都会执行一次    }while(i<1)### 2.for循环    // for循环:    // for(声明临时变量;循环条件;变化值){循环体}    for(let i=1;i<=100;i++){      console.log(i)    }### 3.循环嵌套    for(let i=1;i<=7;i++){      console.log(`今天是第${i}天`)      for(let j=1;j<=7;j++){        console.log(`送了${j}朵花`)      }    }### 4.数组    // 数组:存储多条数据,数组中存放不同的数据类型    // 数组的声明方式    // 1.new    let arr1 = new Array()    console.log(arr1)    // 2.字面量    let arr2=[1,2,3,"zhangsan",true]    console.log(arr2)    // 3.数组的长度    console.log(arr2.length)    // 查看数组里边的元素  数组下标:从0开始    console.log(arr2[3])    console.log(arr2[7])    // 遍历数组    for(let i=0;i<arr2.length;i++){      console.log(arr2[i])    }    // [2,3,4,5,6,714]求所有元素的和以及平均值    let arr3=[2,3,4,5,6,714]    let sum=0    let ar=0    for(let i=0;i<arr3.length;i++){      sum+=arr3[i]    }    document.write(sum)    document.write(`<br>`)    document.write(sum/arr3.length)### 5.数组的操作    let arr1=[1,2,3,4]    // 查  数组名[下标]    // 改    arr1[0]="zhangsan"    console.log(arr1)    // 增    // 数值名.push():一次把一个或多个进行追加数组的前面    arr1.push("o((>ω< ))o")    arr1.push("对对对","对对对")    // unshift():一次把一个或多个进行追加到数组的后面    arr1.unshift("(⊙o⊙)?")    // 删除    // pop()从数组中删除最后一个元素,把元素    arr1.pop()    // shift()从数组中删除第一个元素    arr1.shift()    // splice(start/删除多个元素)删除指定元素    arr1.splice(2,3)    arr1.splice(2,3,"wwwwwd","assssssss","true")### 6.函数    // 函数:一段实现某一功能的代码的集合   本质:实现了代码的高度复用    // 函数在js中的定义方式    // function函数名([参数]){函数体}    function sayhi(say){      console.log(say)    }    // 函数调用 函数名()    // sayhi()    // sayhi()    // 函数只能return出去一条数据    sayhi("顶顶顶顶顶顶顶顶顶顶顶")    function getsum(num1,num2){      // console.log(num1+num2)      return num1+num2,num1-num2    }    let a=getsum(1,2)    console.log(a)    // getsum(1,2)### 7.函数作为参数传参    // function test1(){    //   console.log("test1~~~~")    // }    // function test2(){    //   test1()    //   console.log("test2~~~~")    // }    function test2(fn){      fn(1)      console.log("test2~~~~")    }    //es6 箭头函数    test2((x,y) => {      console.log("test1")    })    function getmax(arr){      let max =0      for(let i in arr){        if(arr[i]>max){                  }      }    }### 8.值传递和引用传递    function change(Array){      // console.log(a)      // console.log(b)      // a+=10      // b+=100      // return a,b      Array.push("zhansan")    }    x=2    y=3    // change(x,y)    // console.log(x)    // console.log(y)    let arr1=[1,2,3,4]    change(arr1)    console.log(arr1)### 9.默认值参数    function getarea(r,PI = 3.14){      return r*r*PI    }    let a=getarea(3)    console.log(a)### 10.可变参数    function getsum(num1,num2){      // return num1+num2      console.log(arguments)      let sum=0      for(let i in arguments){        sum +=arguments[i]      }      console.log(sum)      return sum    }    let a = getsum(1,3,4)    document.write(a)    console.log(a)### 11.作用域    // 作用域:名称在某一个范围内生效,这个范围为就是他的作用域    // 全局作用域  局部作用域  块级作用域    let a=1    function test01(){      console.log(a)    }     test01()    // console.log(b)    for(let i=0;i<=0;i++){      let zhangsan="zhangsan"      console.log(i)    }    console.log(zhangsan)### 12.对象    let name=[172,120,119]    // 对象    let zhangsan={      unname: "张三",      age:21,      sing: () =>{        console.log("你是会唱歌的")      }    }    // 对象:属性和方法    // 查看 对像名.属性        console.log(zhangsan,unname)    zhangsan.sing()    console.log(zhangsan["age"])### 1.剩余参数//...  剩余参数,接到的是除了位置参数以外其余的参数,返回的是真数组    function test(a,b,...arr){      console.log(a+b)      console.log(arr)      console.log(arguments)          }    test(1,2,3,4)## 2.垃圾回收机制// 内存中的生命周期    // 1,内存分配    // 2,内存使用    // 3,内存回收,使用完毕之后    // 内存泄漏,该回收的,    // 栈    // 堆    //     // js:引用计数法   标记清除法    // 引用计数法:如果一个对象已经没有指向它的的引用了    // 内存消耗:循环引用的内存,    // 1.记录引用次数    // 2.++ --    // 3.引用次数为0时,释放内存     // let arr=[1,2,3,4]    let obj={      unname:"zhangsan"    }    let a = obj    a = null    // 标记清除 从根部查找内存中的对象,凡是能找到的,都是是我要进行使用的    let obj2={      a:obj3    }    let obj3={      b:obj2    }    obj2=null### 3.闭包// 内层函数+外层函数的变量  。内层函数使用了外层函数的变量    // function outer() {    //   let i = 10    //   function inner() {    //     console.log(i)    //   }    //   return inner    // }    // let a = outer()    // a()    // a()    // 闭包:外部访问函数内部的变量    // let num = 0    // function test1() {    //   num++    //   console.log(`这是函数调用的第${num}次`)    // }    // test1()    // test1()    // num = 300    // test1()    function outer() {      let num = 0      function inner() {        num++        console.log(`这是函数调用的第${num}次`)      }      return inner    }    let a = outer()    a()    a()    a()    num = 21    a()### 4.mathconsole.log(Math.E)    console.log(Math.PI)    let a = 4.999    let b = 3.11    // 向下进行取整    console.log(Math.floor(a))    // 向上取整    console.log(Math.ceil(b))    console.log(Math.abs(-111))    // 最大值最小值    console.log(Math.max(1, 21, 32, 12, 21))    console.log(Math.min(1, 21, 32, 12, 21))    // 随机数  只能取[0,1)    console.log(Math.floor(Math.random() * ((20 - 10) + 1)) + 10)    //     // function get_random(n, m) {    //   return Math.floor(Math.random() * ((m - n) + 1)) + n    // }    // console.log(get_random(100, 200))    // 四舍五入    console.log(Math.round(3.51))    // 开平方根    console.log(Math.sqrt(9))    // 幂次方    console.log(Math.pow(2, 3))### 5.date// 实例化时间对象    let date = new Date("2024-05-01 00:00:00")    console.log(date)    // 年    let year = date.getFullYear()    console.log(year)    // 月  0-11    let m = date.getMonth() + 1    console.log(m)    // 日    let day = date.getDate()    console.log(day)    // 时分秒    let hh = date.getHours()    let mm = date.getMinutes()    let ss = date.getSeconds()    console.log(hh)    console.log(mm)    console.log(ss)    // 星期    let w = date.getDay()    console.log(w)    // 获取毫秒数    // let mins = date.getMilliseconds()    // console.log(mins)    // 时间戳  此刻距离19700101 00:00:00 的毫秒数    let timechuo = date.getTime()    console.log(timechuo)    function get_time() {      let date = new Date()      let year = date.getFullYear()      let m = date.getMonth() + 1      let day = date.getDate()      let hh = date.getHours()      let mm = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()      let ss = date.getSeconds()      let w = date.getDay()      return `${year}-${m}-${day}  ${hh}:${mm}:${ss}  今天星期${w}`    }    let a = get_time()    console.log(a)### 6.获取元素对象// 1、通过css选择器获取    // document.querySelector("css选择器")    let div1 = document.querySelector(".box1")    console.dir(div1)    // document.querySelectorAll("ul li")  拿到的是伪数组,直接考虑for循环    let lis = document.querySelectorAll("ul li")    console.log(lis)    for (let i in lis) {      console.log(lis[i])    }    // 其他    console.log(document.getElementById("li4"))### 1.元素内容// 1.获取元素对象    const box1=document.querySelector("div")    console.log(box1)    // innerText()  不识别标签    console.log(box1.innerText)    box1.innerText="新内容"    console.log(box1.innerText)    // innerHTMl    console.log(box1.innerHTML)    box1.innerHTML=`<h1>xxxx</h1>`    console.log(box1.innerHTML)    // textContent  不识别标签    box1.textContent=`<h1>5555</h1>`### 2.改属性const ipt = document.querySelector()    //  对象.属性=值    ipt.type="passwd"### 3.改style样式// 1. 获取元素    const box =document.querySelector("div")    // 更改style样式    // 1.对象.style.样式=""    box.style.width="100px"        // 碰见带-的复合属性,采用小驼峰的方式    box.style.backgroundColor="brown"    // className    box.className="box_style"    // classList       // box.classList.add("box_style")追加新的类名到元素对象上    box.classList.add("box_style")    // box.classList.remove("box_style")移除元素对象的类名    // 如果类名存在则移除,如果不存在则添加    box.classList.toggle("box1")### 4.补充// 像是checked这样的属性名=属性值的属性,js在进行赋值时,通过true/false去控制属性值    document.querySelector("input[value='nv']").checked="true"    console.log(document.querySelector("input[value='nv']").checked)### 5.查找结点console.log(document.querySelector(".son").parentNode)    console.log(document.querySelector(".father").childNodes)    console.log(document.querySelector(".father").children)    // 查找兄弟节点    console.log(document.querySelector(".father").nextElementSibling)    console.log(document.querySelector(".father").previousElementSibling)    // console.log(document.querySelector(".father").nextSibling)### 6.事件监听// 事件:事件源  事件类型   处理函数    // l0   on事件类型    const button = document.querySelector("button")    const box = document.querySelector("div")    // 事件源.on事件类型=function(){}      // 同一个事件源,后面注册的事件会对前面注册的事件进行覆盖    // button.onclick = function () {    //   box.style.display = "none"    // }    // button.onclick = null    // button.onclick = function () {    //   console.log("666")    // }    function text() {      alert("666")      box.style.display = "none"    }    // l1  事件监听   不会覆盖    button.addEventListener("click", text, true)    button.removeEventListener("click", text, true)    // button.addEventListener("click", function () {    //   // alert("666")    //   console.log("444")    // }, true)