Web APIs 1 DOM操作

news2024/9/23 13:28:46

Web APIs 1

  • 引入:const优先
  • Web API 基本认知
      • 01 作用和分类
      • 02 什么是DOM
      • 03 DOM树
      • 04 DOM对象
  • 获取DOM对象
      • 01 根据CSS选择器获取
      • 02 其他获取DOM元素方法
  • 操作元素内容
      • 01 innerText 属性
      • 02 innerHTML 属性
  • 操作元素属性
      • 操作元素的常用属性
      • 操作元素的样式属性
      • 操作表单元素的属性
      • 自定义属性
  • 定时器-间歇函数
      • 案例:阅读注册协议
      • 案例:轮播图定时器版

ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECMAScript 大部分的规范加以实现,并且在此基础上又扩展一些实用的功能,这些被扩展出来的内容我们称为 Web APIs。

引入:const优先

const 优先

  • const 语义化更好
  • 很多变量我们声明的时候就知道他不会被更改了,那为什么不用 const呢?
  • 实际开发中也是,比如react框架,基本const
  • 也可以有了变量先给const,如果发现它后面是要被修改的,再改为let

请判断下面的变量是否能从let改成const

//不不不不不可以把let 改为 const
//因为变量进行了重新赋值
let num = 1
num = num + 1
console.log(num)
//可以把let 改为 const
let arr = ['red', 'green']
arr.push('pink')
console.log(arr)
//可以把let 改为 const
let person = {
	uname: 'pink'
	age: 18
	gender: '女'
}
person.address = '武汉黑马'
console.log(person)
// 这是错的
const arr = ['red', 'blue']
arr = [1, 2]

数组和对象是引用类型,里面存储的是地址,只要地址不变,就不会报错

建议数组和对象使用const来声明

Web API 基本认知

01 作用和分类

作用:就是使用 JS 去操作 html 和浏览器

分类:DOM (文档对象模型)、BOM(浏览器对象模型)

在这里插入图片描述

02 什么是DOM

DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API

白话文:DOM是浏览器提供的一套专门用来 操作网页内容 的功能

DOM作用: 开发网页内容特效和实现用户交互

03 DOM树

将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树

描述网页内容关系的名词

作用:文档树直观的体现了标签与标签之间的关系

在这里插入图片描述

最大的document节点,整个页面是一个文件,

04 DOM对象

  • DOM对象:浏览器根据html标签生成的 JS对象(只要是对象就会有属性和方法)

​ 所有的标签属性都可以在这个对象上面找到

​ 修改这个对象的属性会自动映射到标签身上

  • DOM的核心思想

​ 把网页内容当做对象来处理

//在HTML里面叫标签
<div></div>

//在JS里叫DOM对象
const div = document.querySelector('div')
console.dir(div)
  • document 对象

    DOM里面最大的对象是document对象

​ 是 DOM 里提供的一个对象

​ 所以它提供的属性和方法都是用来访问和操作网页内容的

​ 例:document.write()

​ 网页所有内容都在document里面

获取DOM对象

01 根据CSS选择器获取

1、选择匹配的第一个元素

语法:

document.querySelector('css选择器')

页面所有的内容都在document对象中存放,可以通过document

参数:

包含一个或多个有效的CSS选择器 字符串

返回值:

CSS选择器匹配的第一个元素,一个 HTMLElement对象

如果没有匹配到,则返回null

  • 示例
<body>
  <div class="box">111</div>
  <div class="box">222</div>
  <script>
    const box = document.querySelector('div');
	const box2 = document.querySelector('.box');
    console.log('==');
    console.log(box);
	console.log(box2);
  </script>
</body>

在这里插入图片描述

注意只能获取第一个div

<body>
  <p id="nav"></p>
  <script>
    const nav = document.querySelector('#nav')
    const nav2 = document.querySelector('p')
    console.log(nav);
    console.log(nav2);
  </script>
</body>

注意 这里 id和class 是不一样的

<body>
  <ul>
    <li>测试</li>
    <li>测试</li>
    <li>测试</li>
  </ul>

  <script>
    const li = document.querySelector('ul li')
  </script>

2、选择匹配的多个元素

语法:

document.querySelectorAll('css选择器')

参数:

包含一个或多个有效的CSS选择器 字符串

返回值:

CSS选择器匹配的NodeList 对象集合

得到的是一个伪数组:有长度有索引号的数组,但是没有 pop() push() 等数组方法。想要得到里面的每一个对象,则需要遍历(for)的方式获得。

注意:哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个伪数组,里面只有一个元素而已

  • 案例
document.querySelectorAll('ul li')
<body>
  <ul class="nav">
    <li>我的首页</li>
    <li>产品介绍</li>
    <li>联系方式</li>
  </ul>

  <script>
    const nav = document.querySelector('.nav')
    const lis = document.querySelectorAll('ul li')
    
    for(let i=0; i<lis.length; i++) {
      console.log(lis[i]); // 每一个小li对象
    }
  </script>
</body>

02 其他获取DOM元素方法

  <div id="nav"></div>
  <div class="w"></div>

document.getElementById('nav')
document.getElementsByClassName('w')
document.getElementsByTagName('div')

操作元素内容

在获取了DOM对象之后,希望能修改元素的文本更换内容

  • DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。

  • 就是操作对象使用的点语法。

  • 如果想要修改标签元素的里面的内容,则可以使用如下几种方式

  1. 对象.innerText 属性
  2. 对象.innerHTML 属性

01 innerText 属性

将文本内容添加/更新到任意标签位置

显示纯文本,不解析标签

<body>
  <div class="box">我是文字内容</div>
  <script>
    // 1、获取元素
    const box = document. querySelector('.box')
    // 2、修改文字内容
    console.log(box.innerText) //获取文字内容
    box.innerText = '我是一个盒子'
  </script>
</body>

02 innerHTML 属性

将文本内容添加/更新到任意标签位置

会解析标签,多标签建议使用模板字符

<body>
  <div class="box">我是文字内容</div>
  <script>
    // 1、获取元素
    const box = document. querySelector('.box')
    // 2、修改文字内容
    // INNERHTML
    console.log(box.innerHTML);
    box.innerHTML = '<strong>我是一个盒子</strong>'
  </script>
</body>
  • 案例 年会抽奖案例

需求:从数组随机抽取一等奖、二等奖和三等奖,显示到对应的标签里面。

思路分析:

① 声明数组

② 实现随机抽取人

③ innerHTML修改


<body>
  <div class="wrapper">
    <strong>传智教育年会抽奖</strong>
    <h1>一等奖:<span id="one">???</span></h1>
    <h3>二等奖:<span id="two">???</span></h3>
    <h5>三等奖:<span id="three">???</span></h5>
  </div>
  <script>
    let names = ['周杰伦', '刘德华', '周星驰', 'Pink老师', '张学友']
    const random = Math.floor(Math.random()*names.length)
    // console.log(names[random]);
    const one = document.querySelector('#one')
    one.innerHTML = names[random]
    names.splice(random, 1)
  </script>
</body>

操作元素属性

操作元素的常用属性

常用的属性比如:href, title, src

比如在HTML中 img是图片标签,JS中是图像对象,其中有src属性

语法 :对象.属性 = 值

注:如果原本有这个属性,就修改;如果无,就新增。

  • 案例

    需求:刷新页面,页面随机显示不同的图片

    分析:

    ①:随机显示,则需要用到随机函数

    ②:更换图片需要用到图片的 src 属性,进行修改

    ③:核心思路:

    1. 获取图片元素
    2. 随机得到图片序号
    3. 图片.src = 图片随机路径
<body>
  <img src="./images/1.webp" alt="">
  <script>
    // 取到 N ~ M 的随机整数
    function getRandom(N, M) {
      return Math.floor(Math.random() * (M - N + 1)) + N
    }
    // 1. 获取图片对象
    const img = document.querySelector('img')
    // 2. 随机得到序号
    const random = getRandom(1, 6)
    // 3. 更换路径
    img.src = `./images/${random}.webp`
  </script>
</body>

操作元素的样式属性

学习路径:

  1. 通过 style 属性操作CSS(适用于样式比较少的情况)
  2. 操作类名(className) 操作CSS(多个类名操作麻烦)
  3. ⭐通过 classList 操作类控制CSS,三个方法 add remove toggle

1 通过 style 属性操作CSS

语法:对象.style.样式属性 = 值

这里修改之后变成行内样式,优先级高

注意事项:

​ ① 修改样式通过style属性引出

​ ② 如果属性有-连接符,需要转换为小驼峰命名法。比如background-color 写成backgroundColor

​ ③ 赋值的时候,需要的时候不要忘记加css单位

<body>
  <div class="box"></div>
  <script>
    // 获取对象
    const box = document.querySelector('.box')

    // 修改样式
    box.style.height = '900px' //注意这里不能漏掉单位
    // box.style.background-color = 'red';  这里是错的
    box.style.backgroundColor = 'red'
    // 解决方式是小驼峰命名法
  </script>
</body>
<style>
  .box {
    width: 200px;
    height: 200px;
    background-color: pink;
  }
</style>
  • 案例:页面刷新,页面随机更换背景图片

需求:当我们刷新页面,页面中的背景图片随机显示不同的图片

分析:

①: 随机函数

②: css页面背景图片 background-image

③: 标签选择body, 因为body是唯一的标签,可以直接写 document.body.style

2 操作类名(className) 操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。

语法:元素.className = ‘active’

// active是一个css类名

注意:

  1. 由于class是关键字, 所以使用className去代替
  2. className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名
  3. 直接使用 className 赋值会覆盖以前的类名
<body>
  <div class="mybox"></div>
</body>

<style>
  .mystyle {
    width: 300px;
    height: 300px;
    margin: 100px auto;
    border: 1px solid black;
  }
    
  .color {
     background-color: red;
  }
</style>

  <script>
    const mybox = document.querySelector('.mybox');
    mybox.className = 'mystyle'
  </script>

如果相同添加 mystyle color,只需要 mybox.className = 'mystyle color'即可

3 通过 classList 操作类控制CSS

为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名

语法:

// 追加一个类

元素.classList.add(‘类名’)

// 删除一个类

元素.classList.remove(‘类名’)

// 切换一个类:有就删掉,没有就加上

元素.classList.toggle(‘类名’)

  • 案例:轮播图简易版

    ①:页面一刷新,图片会随机变换

    ②:底部盒子背景颜色和文字内容会变换

    ③:小圆点随机一个高亮显示

在这里插入图片描述

分析:

①: 准备一个数组对象,里面包含详细信息(素材包含)

②: 随机选择一个数字,选出数组对应的对象,更换图片,底部盒子背景颜色,以及文字内容

③: 利用这个随机数字,让小圆点添加高亮的类(addClass) 利用css 结构伪类选择器

<body>
  <div class="slider">
    <div class="slider-wrapper">
      <img src="./images/slider01.jpg" alt="" />
    </div>
    <div class="slider-footer">
      <p>对人类来说会不会太超前了?</p>
      <ul class="slider-indicator">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
      <div class="toggle">
        <button class="prev">&lt;</button>
        <button class="next">&gt;</button>
      </div>
    </div>
  </div>
  <script>
    // 1. 初始数据
    const sliderData = [
      { url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
      { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
      { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
      { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
      { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
      { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
      { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
      { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    ]

    // 图片、文字、背景颜色、li都要修改

    //随机选中哪一个数据
    function getRandom(N, M) {
      return Math.floor(Math.random() * (M - N + 1)) + N
    }
    const random = getRandom(1,8)

    // 修改图片
    const img = document.querySelector('.slider-wrapper img')
    img.src = sliderData[random].url

    // 修改文字
    const p = document.querySelector('.slider-footer p')
    p.innerHTML = sliderData[random].title 

    //修改背景颜色
    const footer = document.querySelector('.slider-footer')
    footer.style.backgroundColor = sliderData[random].color

    //修改li
    const lis = document.querySelectorAll('.slider-indicator li')
    lis[random-1].classList.add('active') 
    
    //这里也可以用 li:ntd-child
    // const li = document.querySelector(`.slider-indicator li:nth-child(${random})`)
    // li.classList.add('active') 
  </script>
</body>

操作表单元素的属性

操作 表单元素 的属性

  • 表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框

  • 正常的有属性有取值的 跟其他的标签属性没有任何区别

操作方法

获取: DOM对象.属性名

设置: DOM对象.属性名 = 新值

表单的重要属性:value 和 type

value是表单的值,单标签的值;如果是双标签的内容就是innerHTML,button是双标签,所以不是value,而是innerHTML

<body>
  <input type="text" value="电脑">
</body>

<script>
  // step 1 获取元素
  const uname = document.querySelector('input')

  // step 2 获取值:获取表单里面的值 用的是表单.value
  console.log(uname.value);
  console.log(uname.innerHTML); //innerHTML得不到表单的内容

  // step 3 修改值
  uname.type = 'password'
</script>

表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为true 代表添加了该属性 如果是false 代表移除了该属性

例如表单的 disabled、checked、selected

在这里插入图片描述

<body>
  <input type="checkbox">
</body>

<script>
  const ipt = document.querySelector('input')
  console.log(ipt.checked) // checked默认false
  ipt.checked = true
</script>

注意这里 ipt.checked = ’true‘ 还是会有效果,但是不提倡。因为字符串里面只有空字符串着一种情况才为 false,其余的全部为 true

<body>
  <button>点击</button>
</body>

<script>
  const button = document.querySelector('button')
  button.disabled = true
</script>

自定义属性

标准属性:

标签天生自带的属性 比如class id title等, 可以直接使用点语法操作比如: disabled、checked、selected

自定义属性:

在html5中推出来了专门的data-自定义属性

在标签上一律以 data- 开头

在DOM对象上一律以dataset 对象方式获取

  • 示例
<body>
  <div data-id="1" data-spm="haha" data-haha="aa">1</div>
  <div data-id="2">2</div>
  <div data-id="3">3</div>
  <div data-id="4">4</div>
  <div data-id="5">5</div>
</body>
<script>
  const one = document.querySelector('div') // 获取第一个div
  console.log(one.dataset)
  console.log(one.dataset.id)
  console.log(one.dataset.spm)
  console.log(one.dataset.haha)
</script>

在这里插入图片描述

定时器-间歇函数

引入:

网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发。例如:网页中的倒计时

要实现这种需求,需要定时器函数

定时器函数有两种,今天先讲间歇函数

定时器函数可以开启和关闭定时器

1. 开启定时器

setInterval(函数,间隔时间)
间隔时间单位是毫秒

作用:每隔一段时间调用这个函数

注意:

在这里插入图片描述

  • 举例
// 方法1 匿名函数
<script>
  //setInterval()
  setInterval(function(){
    //匿名函数
    console.log("一秒执行一次");
  },1000)
</script>

// 方法2 函数
<script>
  function fn() {
    console.log("一秒执行一次");
  }

  setInterval(fn, 1000)
    //请注意代码执行到这里的时候,会隔一秒之后再第一次打印
</script>

2. 关闭定时器

场景:轮播图一般一直在播放,但是用户鼠标放上去之后就应该停止

let 变量名 = setInterval(函数,间歇时间) //这里不可以用const
clearInterval(变量名)
let timer = setInterval(function() {
    console.log('hihihi')
}, 1000)

clearInterval(timer)

每一个定时器都有对应的一个号,相互独立

一般不会刚创建就停止,而是满足一定条件再停止

案例:阅读注册协议

需求:按钮60秒之后才可以使用

分析:

​ ①:开始先把按钮禁用(disabled 属性)

​ ②:一定要获取元素

​ ③:函数内处理逻辑

​ 秒数开始减减

​ 按钮里面的文字跟着一起变化

​ 如果秒数等于0 停止定时器 里面文字变为 同意 最后 按钮可以点击

<body>
    <textarea name="" id="" cols="30" rows="10">
        用户注册协议
        欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议
      </textarea>
    <br>
    <button class="btn" disabled>我已经阅读用户协议(5)</button>

</body>
<script>
  const btn = document.querySelector('.btn')

  let i = 5
  let cl = setInterval(function(){
    i--
    btn.innerHTML = `我已经阅读用户协议(${i})`

    if(i === 0) {
      clearInterval(cl) //关闭定时器
      btn.disabled = false
      btn.innerHTML = '同意'
    }
  },1000)
</script>

案例:轮播图定时器版

需求:每隔一秒钟切换一个图片

<body>
  <div class="slider">
    <div class="slider-wrapper">
      <img src="./images/slider01.jpg" alt="" />
    </div>
    <div class="slider-footer">
      <p>对人类来说会不会太超前了?</p>
      <ul class="slider-indicator">
        <li class = "active"></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
      <div class="toggle">
        <button class="prev">&lt;</button>
        <button class="next">&gt;</button>
      </div>
    </div>
  </div>
  <script>
    // 1. 初始数据
    const sliderData = [
      { url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
      { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
      { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
      { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
      { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
      { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
      { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
      { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    ]

    // 获取元素
    const img = document.querySelector('.slider-wrapper img')
    const p = document.querySelector('.slider-footer p')
    const footer = document.querySelector('.slider-footer')
    
    //开启定时器
    let i = 0
    setInterval(function() {
      //刚打开网页的时候默认了第一张图片,所以定时器应该从第二张开始
      i++
      i = i % 8
      // console.log(sliderData[i]);
      img.src = sliderData[i].url
      p.innerHTML = sliderData[i].title
      footer.style.backgroundColor = sliderData[i].color

      //先删除以前的active 
      document.querySelector(`.slider-indicator .active`).classList.remove('active')
      //找出当前的 .active然后删掉,
      //注意在HTML中一定!!!一定在最开始需要加上 一个 active

      //只让当前li添加 active
      document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
      // 数组从0开始,小li从1开始

    }, 1000)
  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA项目(15)——基于FPGA的DDS信号发生器

1.相关概念 DDS&#xff08;Direct Digital Synthesis&#xff0c;直接数字合成&#xff09;是一种通过数字技术生成精确频率和相位可调的信号的方法。它基于数字时钟和数值控制的方式&#xff0c;通过累加器、相位累积器和查表器等组件&#xff0c;以数字方式实现信号的频率和…

RK35x8-RTC(RX8025T)驱动加载

RTC芯片简介 RX8025-T是EPSON 推出的一款拥有I2C接口和温度补偿功能的新型实时时钟芯片&#xff0c;内部集成32.768KHz温度补偿晶体振荡器&#xff0c;可用于各种需要高精度时钟的场合。通过设置相应补偿的控制位&#xff0c;可以实现不同间隔的温度补偿功能&#xff0c;从而大…

聊聊并发编程,另送5本Golang并发编程新书

大家好&#xff0c;我是飞哥&#xff01; 并发编程并不是一个新话题&#xff0c;但是我觉得在近几年以及未来的时间里&#xff0c;并发编程将显得越来越重要。 为什么这样讲&#xff0c;让我们先回到一个基本的问题上来&#xff0c;为什么我们要采用并发编程&#xff1f;关于这…

Gson源码解读

一&#xff0c;概述 gson作为流行的json工具&#xff0c;笔者使用较多。本文主要目的是解读下Gson的源码实现&#xff0c;就没有然后了。 二&#xff0c;实例 实例如下图所示&#xff0c;笔者简单调用gson的toJson方法获得json字符串&#xff0c;fromJson则从json字符串解析…

基于单片机的造纸纸浆液位控制系统结构设计

摘要:为适应无人化与高效化制浆造纸生产体系&#xff0c;造纸企业趋于以嵌入式技术优化造纸过 程中的纸浆液位控制系统&#xff0c;以单片机与传感器相互耦合实现纸浆液位控制。本文基于单片机 设计了造纸纸浆液位控制系统&#xff0c;其结构由控制模块、信息采集模块、物联网模…

ASP.NET Core 自定义解压缩提供程序

写在前面 在了解ASP.NET Core 自定义请求解压缩中间件的应用时&#xff0c;依据官方文档操作下来碰到了几个问题&#xff0c;这边做个记录。 关键点就是配置 Content-Encoding&#xff0c;参数需要和代码中添加的提供程序的Key保持一致&#xff1b; builder.Services.AddRequ…

(bean配置类的注解开发)学习Spring的第十三天

bean配置类的注解开发 问题提出 用类充当配置文件 applicationcontext.xml : Configuration注解标识此类为配置类,替代原有xml文件 看原配置文件applicationcontext.xml代码 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http:/…

ctfshow——文件包含

文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含&#xff08;http://协议&#xff09; web 78——str_replace过滤字符php第一种方法——远程包含&#xff08;http://协议&#xff09;第二种方法——data://&…

FPGA项目(16)——基于FPGA的音乐演奏电路

1.设计要求 能在实验箱上&#xff0c;循环播放一段音乐。&#xff08;需要源码的直接看最后一节&#xff09; 2.设计原理 组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需要的两个基本要素&#xff0c;问题是如何来获取这两个要素所对应的数值以及通过纯硬件…

2024.2.3

单向循环链表的头插 头删 尾插和尾删 //头结点插入 Linklist insere_element(Linklist head,datatype element) {Linklist screat();s->dataelement;if(NULLhead){heads;}else{Linklist phead;while(p->next!head){pp->next;}s->nexthead;heads;p->nexthead;}r…

探索前端开发框架:React、Angular 和 Vue 的对决(一)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Linux下vim命令详解

vim #创建或编辑新的文件 #这将在当前目录下创建一个名为fi.txt的新文本文件。如果文件已经存在&#xff0c;将会编辑现有文件。 [rootsever ~]#vim fi.txt #对于普通的文本编辑操作&#xff0c;可以使用以下键盘命令&#xff1a; - i&#xff1a;进入插入模式&#xff…

[职场] 英语面试自我介绍 #微信#笔记#媒体

英语面试自我介绍 英语面试自我介绍1 I am very happy to introduce myself here.I was born in Liaoning Province.I graduated from Nankai University and majored in International Trade.I like music and reaing books,especially economical books.It is my honor to ap…

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法…

Java数组声明、创建、赋值和使用

目录 数组的定义数组的创建访问数组元素遍历数组数组实例分析 数组的定义 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据&#xff0c;按照一定的先后次序排列组合而成。其中&#xff0c;每一个数据称作一个元素&#xff0c;每个元素可以通过一个索引&#…

[word] word表格两列互换 #学习方法#其他

word表格两列互换 Word表格也常用的数据表&#xff0c;在使用表格时&#xff0c;不管是编辑数据&#xff0c;调整数据&#xff0c;还是删除数据&#xff0c;都是有小技巧的&#xff0c;今天给大家分享word表格两列互换的小技巧&#xff0c;简单又实用。 1、两列互换 那么两列…

太强了,AI数字人从制作到变现一次搞定

AI数字人从制作到变现 如果说GPT类大模型是我们人类的第二大脑&#xff0c;数字人就是我们人类在互联网上的第二个身体。随着 AI 的迅速发展&#xff0c;2024 年 AI 模型开始从大型语言模型向大型视觉模型转变。数字人技术作为其分支之一&#xff0c;正日益成为科技、娱乐、教…

算法42:天际线问题(力扣218题)---线段树

218. 天际线问题 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示&#xff0c;其中三元组 buildings[i] [lefti, righti, heig…

中国大学生计算机设计大赛与大数据应用主题赛

中国大学生计算机设计大赛 与大数据应用主题赛 中国大学生计算机设计大赛&#xff08;简称“大赛”或4C&#xff09;始筹于2007年&#xff0c;首届于2008年&#xff0c;已经举办了16届80场赛事。是我国高校面向本科生最早的赛事之一&#xff0c;由教育部计算机类教指委发起举…

Android Button background 失效

问题 Android Button background 失效 详细问题 笔者开发Android项目&#xff0c;期望按照 android:background中所要求的颜色展示。 实际显示按照Android 默认颜色展示 解决方案 将xml的Button 组件修改为<android.widget.Button> 即将代码 <Buttonandroid:l…