HTMLCSSJS

HTML基本结构

<html><head><title>标题</title></head><body>页面内容</body>
</html>

html是一棵DOM树, html是根标签, head和body是兄弟标签, body包括内容相关, head包含对内容的编写相关, title 与标题有关.类似html这种有开始有结束的是双标签,也存在单标签,程序员可以通过管理这些标签,对对象进行增删改查

使用txt文本编写,然后修改后缀为html,双击跳转到页面

页面中的$0是指像素为0的意思

前端通常使用vscode进行编码, 轻量级功能强大, 使用快捷方式!+回车会自动生成模板

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body>内容
</body>
</html>

第一行是表示html的版本是html5, ,第二行对浏览器说明内容语言,lang是language缩写,en是english缩写,修改该行,对内容编写的展示没有影响,charset说明解码方式是UTF-8,这取决你使用的编码方式

右下角windows1256是采用的编码,仍旧使用UTF-8来解码

解码失败

后面的是对移动端浏览的适配修改

注释标签

<!-- -->

标题标签

<html><head><title></title></head><body><!-- 注释 --><h1>h1标题</h1><h2>h2标题</h2><h3>h3标题</h3><h4>h4标题</h4><h5>h5标题</h5><h6>h6标题</h6></body>
</html>

随着h1->6随着数字增大,字体缩小,字体越细

段落标签

html中使用双标签<p></p>进行段落划分,因为内容部分进行换行在浏览器中只会以空格形式存在,并不会进行换行,需要使用刚才的标签

<html><head><title></title></head><body><!-- 注释 --><h1>标题</h1><p>第一段</p><p>第二段</p></body>
</html>

换行标签<br/>

规范使用<br/>,但是<br>也可以使用,换行相比于段落标签间隙会小一些

格式化标签

<html><head><title></title></head><body><!-- 注释 --><p><strong>加粗</strong></p><p><b>加粗</b></p><p><em>倾斜</em></p><p><i>倾斜</i></p><p><del>删除线</del></p><p><s>删除线</s></p><p><ins>下划线</ins></p><p><u>下划线</u></p></body>
</html>

加粗: strong 标签 和 b 标签
倾斜: em 标签 和 i 标签
删除线: del 标签 和 s 标签
下划线: ins 标签 和 u 标签

前一个较后一个有强调作用,便于搜索爬虫进行权重判断

图片标签: img

<img src="">  双引号内部使用相对路径或者绝对路径描述图片的位置,或者可以将网络上图片的链接放上,均可发布图片

img后面使用width,height控制宽度,高度,  使用border设置边框,  当图片加载失败使用alt来作提示文本,但是只有图片加载失败时才会出现,  使用title,当你的按键停放在图标会弹出文案来说明

超链接标签: a

        <a href="链接">命名</a>

使用href放入链接,后面跟入对链接的说明,可以进行链接跳转,在引号内部放入#,跳转到当前页面的顶部,命名也可以使用img放入图片来进行跳转,如果要实现点击图案后,跳转到新的页面,而非就地跳转,可以使用target赋值为_blank实现

表格标签:table

tr:表示单元行

td:表示单元格

设置边框在table后面跟随border并设置其厚度,  根据width和height来设置长和宽,  如果现在打印会在单元格之间出现间隙,要想修改间隙需要修改cellspacing数值, 修改符号在单元格的位置可以通过cellpadding来修改距离左边的大小,  调整表格在整个页面的位置可以通过align

thead管理表格的表头部分,  其内包含多个tr元素,  这些tr元素包含表头单元格th,  表头单元格通常在浏览器中会将其单元格内容加粗居中

使用rowspan和colspan来分别进行行合并和列合并

列表标签

无序列表

<ul> <li>

ul标签使用type来对前面图案进行修改,  disc是默认图案:实心圆,  square:实心方块,  circle:空心圆

有序列表

<ol> <li>

ol标签同样使用type修饰对前面的序列进行限制,  例如使用小写罗马数字进行序列排序就在ol标签后面修饰type="i",  后面使用start修饰序列的开始,  使用阿拉伯数字定义起始位置

自定义列表

<dl>总标题 <dt>小标题 <dd>内容

表单标签

form标签

控制数据传输形式并与服务器联系,  实现用户与服务器的交互

input标签

input标签使用type修饰,  type=text接收用户输入的文本,  type=password是密码接收文本,  对用户输入进行遮挡达到保密,  type=radio实现单选框,  单选框要实现多选一的功能要用name组实现同一组而相互排斥  如果存在默认选项可以使用checked进行修饰

复选框
<input type="checkbox">

选项可选中可取消

普通按钮
        <input type="button" value="">

value输入按钮的文本内容

提交按钮
        <input type="submit" value="提交">

用户输入内容向服务器传输, value表示按钮内容

清除按钮
        <input type="reset" value="清空">

清除用户输入的内容

选择文件
        <input type="file">

选择系统的文件上传到服务器

label标签

<label for=""></label>

for内部填入要关联的表单元素的id,  使得当点击label标签对应的表单文本会出现类似点击表单控件的效果

select标签

<select name="" id=""><option value=""></option>
</select>

select标签一般结合option标签出现选择文本内容的效果,  出现多个option选择会默认第一个为初始选项,  改变默认选项需要在对应option标签加入selected属性来修改默认

textarea标签

        <textarea name="" id="" cols="30" rows="10"></textarea>

rows控制文本高度,  cols控制文本宽度

无语义标签div/span

div标签代表一个大盒子,  独占一行,   span标签代表一个小盒子,  使用二者对网页进行布局排布

HTML特殊字符;

  • 空格:&nbsp;
  • 小于号:&lt;
  • 大于号:&gt;
  • 按位与:&amp;

CSS

基本模式

选择体+ {

        一个或多个命令行

}

内部注释使用/**/

命令行会使用属性-值的模式,一般放在head里

内部样式表

使用style标签将css嵌套到html中

优点: 便于测试

缺点: 分离不够彻底, 尤其是当样式丰富时, html文件增大, 模糊css和html的边界, 使得代码维护成本变高

行内样式表

行内样式表是对html标签元素具体进行style修饰,  优先级最高,  一般与其他样式表冲突会优先显示,  但是当外部样式表出现更加详细的描述,  可能会被覆盖,  针对单个元素

外部样式

外部样式是建立一个css文件来对html文件进行格式修饰,  使得css与html独立开来,  便于后期维护

选择器种类

基础选择器

标签选择器

对一类标签进行进行一致化格式处理,  不能进行个体差异化处理

类选择器

使用类class对标签进行标记,  使用类选择器

    .类名 {
}

"."后面接收类名,  大括号内部是对类属性的描述

id选择器

与类选择器类似,  id选择器使用#后接id,  使用大括号来包裹属性

通配符选择器
    * {
}

对元素统一进行统一样式要求

复合选择器

后代选择器
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>ul li {color: red;}</style>
</head>
<body><ol><li>111</li><li>111</li><li>111</li></ol><ul><li>111</li><li>111</li><li>111</li></ul>
</body>
</html>

对上述代码无序列表和有序列表都存在,   为了处理无序列表中的li单独进行处理,   就可以使用后代选择器

        父类  子类 {操作}
伪类选择器
    <style>a {默认颜色}a:hover {鼠标悬浮的颜色}a:active {按下未弹起的颜色}</style>

常用元素属性

字体属性

       font-family: ''

字体大小

        font-size: px;

字体颜色

    color: red;
    color: #ff0000;

#后面一般接6个十六进制数字,   前两个表示红色,   中间两个表示绿色,   最后两个表示蓝色,   数字越大颜色越深

color: rgb(255, 0, 0);

r表示红色,    g表示green,   b表示blue,   仍是使用三原色,  使用十进制数字(0~255)

字体粗细

font-weight: bold;

使用英文表示,  light细体,   bold粗体,  bolder粗体再加粗,   normal正常粗细;   使用数字,   范围100~900,   400表示正常粗细

字体样式

    font-style: italic;

斜体设置

文本对齐

    text-align: center;

上述为居中对齐,  靠左对齐或靠右对齐则分别在冒号后面输入left或right即可

文本缩进

控制首行缩进

        text-indent: 20px;text-indent: 2em;

单位px或em

em更好一点,  表示一个元素大小

文本修饰

text-decoration: underline;//下划线text-decoration: line-through;//删除线text-decoration: overline;//上划线text-decoration: none;//什么都没有,  可以将a的下划线消去

行高

line-height: 60px;

背景属性

        /*背景颜色*/background-color: ;/*背景图片*/background-image: url();/* 不重复平铺 */background-repeat: no-repeat;/* 重复平铺 */background-repeat: repeat;/* 沿x轴平铺 */background-repeat: repeat-x;/* 沿y轴平铺 */background-repeat: repeat-y;/* 背景图片的位置*//* 使用方位或者精确位置, 可以混搭*/background-position: 300px 300px ;background-size: 700px 300px;/* 扩大到图片覆盖整个背景区域 */background-size: cover;/* 图片放到到适应背景的宽和高 */background-size: contain;

圆角矩形

            /* 矩形边框 */border: 2px green solid;/* 圆角 */border-radius: 20px;

圆形

            width: 400px;height: 400px;/* 矩形边框 */border: 2px green solid;/* 圆形 *//*设置为正方形边长一半*//* border-radius: 200px; */border-radius: 50%;

圆角矩形展开写法

            border-top-left-radius: 100px;border-top-right-radius: 200px;border-bottom-right-radius: 300px;border-bottom-left-radius: 400px;border-radius: 100px 200px 300px 400px;

元素的显示模式

            /* 使得行内元素占据一行 */display: block;
            /*边框颜色*/border-color: black;/*边框宽度*/border-width: 10px;/*边框类型*/border-style: solid;/*上面形式快捷写法, 先后顺序不固定*/border: black 10px solid;/*因为边框的缘故, 原来的盒子会变大, 可以使边框在内部占用空间*/box-sizing: border-box;
            /*内边框是内容与边框的距离*//*上 右 下 左*/padding-top: 10px;padding-right: 20px;padding-bottom: 30px;padding-left: 40px;/* 快捷方式 */padding: 10px 20px 30px 40px;/* 为了使内边框不扩充盒子的大小, 采用和边框一样的方式 */box-sizing: border-box;
            border: 10px green solid;/* 设置外边距, 使得盒子之间有空隙 */margin-top: 10px;margin-right: 10px;margin-bottom: 10px;margin-left: 10px;margin: 10px;/* 按照上 右 下 左的方式, 顺时针填入可快捷给出外边框各边距 */margin: 1px 2px 3px 4px;/* 块元素居中 */margin: auto;/* 内部元素居中 */text-align: center;

去浏览器默认化环境(不同浏览器差异)

        * {padding: 0px;margin: 0px;}

弹性布局

由于某种原因某些元素排布会受到自身限制,   为了使得元素自由布局使用弹性布局来解决上述问题,    display: flex; 使得元素可以自由布局,   justify-content: center;  使得元素横向分布居中,   align-items: center;   使得元素纵向分布居中

JavaScript

ECMAScript: 基础语法部分

书写形式

行内式

在html的元素属性中使用JavaScript的代码

内部式

html文档中,   在script元素内部使用JavaScript内部

外部式

html文档中,   使用script元素src属性调用.js文件,   内部通常是空的

定义变量

在JavaScript语法中,  可以使用let或var定义变量,   但是let定义变量会将变量限制在块级作用域,   防止变量名的污染,   而且对于错误的检举会更加优异,   更推荐使用let,   虽然let出现晚,  但更偏向于现代编程

强类型变量&弱类型变量

在编译语言中,   针对是否进行严格检查类型来区分强弱类型变量,  强类型变量在编译期间要严格声明变量类型,   且不同类型之间转换要进行显式转换,   弱类型变量在编译期间不限制变量类型,   变量可以进行动态的转换,   可能进行隐式转换

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body></body>
<script>    a = 1;b = 'b';a = b;console.log(a);
</script>
</html>

控制台中可以发现a被赋值为了'b'   ,并不会报错

动态类型&静态类型

动态变量在运行期间可以转换为其他不同类型,   静态变量定义后在运行期间不会改变变量类型

数字类型number

在JavaScript中,   number是包含小数和整数的内置类型,   使用前置来表示不同进制的数字,  例如八进制使用0,   二进制使用0b或0B,   十六进制使用0x或0X,   使用Infinity来表示正无穷大,   使用-Infinity来表示负无穷大,   非数字进行数字运算得出不是一个数字的值会使用NaN表示

string字符串类型

在JavaScript中,   使用双引号或单引号来包裹字符串,   如果要在内部使用单引号或双引号可以通过单双引号交替使用来达到效果,  或者使用转义字符

boolean类型

在JavaScript中,  布尔类型包括true和false,   参与算数运算时true相当于1,   false相当于0

undefined类型

在JavaScript中,   在未定义变量时,   变量的类型为undefined类型

null类型

null表示一个空值

算数运算符

使用==判断二者的内容,   使用===判断内容及其数据类型

数组

新增数组元素

通过数组下标新增数组元素,   数组下标越界时,   JavaScript会自动扩展到该下标,   并在该下标填充元素

使用push方法,   在数组的尾部添加元素

删除数组元素

使用splice方法进行数组元素删除,   第一个参数传入开始删除的下标,    第二个参数传入删除的个数

函数

基本形式
    function 函数名(参数列表) {函数体return 返回值;}

当传入的参数个数小于参数列表的个数,   从左往右接收,   未接收的参数属于undefined类型,   当传入参数大于参数列表个数,   多余的传入值会以整体的形式赋值给最后的参数

函数表达式
    (此处定义变量,例如 let a) = function(参数列表) {函数体return 返回值;}

使用变量来接收匿名函数,   通过该变量来调用函数

作用域

全局作用域:  在所有的函数外部声明,   在script标签内部或单独的js文件生效

局部/函数作用域:  只在函数内部生效,

作用域链

函数内部可以包含其他函数,   称为内部函数或嵌套函数

内部函数在查找变量时会先在自身的局部域进行查找,   如果找不到会向包含它的外部函数进行由内而外的查找,   直到找到为止,   仍未找到时会在全局域进行查找

对象

字面量创建对象
//创建对象使用大括号let res = {//函数属性使用键(属性)值对的形式//属性和值之间使用':'//键值对使用','分隔name: 'aaaa',age: 999,//使用属性名来表示函数属性, 其值是匿名函数f : function() {console.log("abcd");}}

使用对象的属性:

对象名.属性名

对象名['属性名']

调用对象的函数属性:

对象名.函数名

使用new Object()创建对象
    let a = new Object();a.name = 'abc';a.height = 111;a.f = function() {console.log("aaaaa");}

使用new Object()实例化对象,  然后对象使用点符号来创建属性

使用构造函数创建对象

在JavaScript中,  当需要创建的对象具有相同的属性和方法时,  可以使用构造函数来便利地创建对象

    function 构造方法的名字(参数列表) {this.属性 = 属性this.函数名 = function(参数列表) {}}let 变量名 = new 构造方法的名字(参数列表);变量名.函数名;
    function Cat(a, b, c) {this.a = a;this.b = b;this.c = c;this.ABCD = function() {console.log(a+"狗叫ing")}} let yy = new Cat('baga', 186, 78);c.ABCD();
使用class创建对象
class 类名 {  // 构造函数,当创建类的实例时会被调用  constructor(参数列表) {  // 在这里初始化类的属性或执行其他操作  }  // 类的方法  函数名(参数列表) {  // 方法的实现  }  // 还可以定义其他方法或计算属性等  
}

关于使用static关键字:  static是修饰静态方法和静态属性的,  属于类而不能被类的实例访问

WebAPI

DOM API: 操作页面结构

获取元素: querySelector/querySelectorAll

使用querySelector/querySelectorAll更为快速精确的选中元素

    let res = document.querySelector(selector)

selector是合法DOM字符串,   如果选择存在父子类关系,   可以连续调用querySelector或querySelectorAll来进行选择,   querySelector默认返回selector第一个元素,   querySelectorAll默认返回NodeList,   其包含与选择器匹配的所有元素,   例如document.querySelector('div')默认返回第一个div元素

事件初识

事件三要素:

事件源: 谁触发的,  触发事件的元素

事件类型:  选中, 修改和点击等

事件结果:  对于事件发生后的结果,   一般使用回调函数接收

例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="button" value="别碰我">
</body>
<script>// 事件源使用res接收let res = document.querySelector('input');//我们要点击事件源, 使用onclick实现//匿名函数来实现事件结果res.onclick = function() {alert("还敢碰");}
</script>
</html>
键盘按下事件: onkeypress/onkeydown
<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>键盘事件示例</title>  
</head>  
<body>  <!-- 输入框 -->  <input type="text" id="myInput">  
</body>  
<script>  // 事件源: 输入框  let res = document.querySelector('#myInput');  // 按下键盘会触发此事件  // 结果是在控制台输出按键的编码值  res.onkeydown = function(event) {  // 接收按键的编码值  let keyCode = event.keyCode;  console.log('Key Code:', keyCode);  // 注意:keyCode 并不总是能转化为对应的字符,特别是对于非字符键  // 因此,下面这行代码可能不会得到预期结果  let char = String.fromCharCode(keyCode);  console.log('Character Attempt:', char);  };  // 按下键盘的字符键会触发此事件  // 结果是在控制台输出输入的字符  res.onkeypress = function(event) {  // 接收字符编码  let charCode = event.charCode || event.keyCode;  let char = String.fromCharCode(charCode);  console.log('Character:', char);  };  
</script>  
</html>
操作元素
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="button" class="but" value="播放"></body>
<script>let state = document.querySelector('.but');state.onclick = function() {if(state.value == '播放') {state.value = '暂停'}else {state.value = '播放'}}
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input class="class1" type="text" value="0"><input type="button" class="class2" onclick="Add()" value="+1"><input type="button" class="class3" onclick="Min()" value="-1">
</body>
<script>function Add() {let o = document.querySelector('.class1')o.value = parseInt(o.value) + 1;}function Min() {let o = document.querySelector('.class1')o.value = parseInt(o.value) - 1;}
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="checkbox" class="All" onclick="SelectAll()">全选<br><input type="checkbox" class="select" onclick="Check()">选项一<br><input type="checkbox" class="select" onclick="Check()">选项二<br><input type="checkbox" class="select" onclick="Check()">选项三<br><input type="checkbox" class="select" onclick="Check()">选项四<br>
</body>
<script>let s = document.querySelectorAll('.select')let res = document.querySelector('.All') //当全选按键触发,  会使得所有的.select按键与之同状态function SelectAll() {for (let index = 0; index < s.length; index++) {s[index].checked = res.checked;}}for (let index = 0; index < s.length; index++) {//每次按键触发都会进行, 当.select按键触发都会遍历整个.select按键//如果都选择就会使得.All按键也选择, 反之, 有一个没有选择, All按键就会取消s[index].onclick = function() {res.checked = A(s);}}function A(s) {for (let i = 0; i < s.length; i++) {if(!s[i].checked) {return false;}}return true;}
</script>
</html>
获取/修改样式属性

css中指定的属性,   大部分可以使用JS来修改

行内样式操作
    element.style.[属性] = [属性值];element.style.cssText = "属性:属性值"; 

行内样式直接在style上进行操作,  优先级很高,  一般用于样式少的情况,   只对特定的样式进行修饰

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div style="font-size: 10px;" onclick="Bigger()">巴拉巴拉</div>
</body>
<script>function Bigger() {let m = document.querySelector('div')// m.style.fontSize = (parseInt(m.style.fontSize) + 10)+'px';m.style.cssText = 'font-size:' + (parseInt(m.style.fontSize) + 10) + 'px';}
</script>
</html>
类名样式操作

修改元素的类名,  适用于修改样式较多的情况

    element.className = [CSS类名]
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body,html {width: 100%;height: 100%;}.light {color: white;background-color:black;width: 100%;height: 100%;}.dark {color: dark;background-color:white;width: 100%;height: 100%;}</style>
</head>
<body><div class="light" onclick="changeStyle()">哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br>哈哈哈哈哈哈哈哈哈哈哈哈<br></div></body>
<script>function changeStyle() {let classElement = document.querySelector('div');if(classElement.className=='light') {classElement.className = 'dark';}else {classElement.className = 'light';}}
</script>
</html>
操作节点
新增节点

1. 创建节点

2. 将节点插入DOM树

创建节点
    let element = document.createElement('元素名');

此时只创建了节点,  还没有插入DOM树

插入节点
    element.appendChild(otherElement);

将元素插入到父结点的最后一个节点位置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p><p>这是一个p标签</p></div>
</body>
<script>let element = document.createElement('h3');element.innerHTML = '这是一个h3标签';let div = document.querySelector('div');div.appendChild(element);
</script>
</html>

    element1.insertBefore(element2, element3);

在element1节点中,  将element2插入到element3之前,  如果element3是null,  那么会插入到element1的最后一个节点的位置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div><p>这是第1个p标签</p><p>这是第2个p标签</p><p class="p3">这是第3个p标签</p><p>这是第4个p标签</p><p>这是第5个p标签</p></div>
</body>
<script>let div = document.querySelector('div');let node = document.createElement('p');node.innerHTML = '这是一个新的p标签';div.insertBefore(node, document.querySelector('.p3'));
</script>
</html>

注意1:

对于一个节点插入后,   再重复进行插入操作只算作最后一次插入操作,  这个过程因为不能同时出现两个节点所以把之前的节点移除再在刚才的插入操作进行插入,   可以近似理解为"移动",   但并不是移动

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div><p>第1个p标签</p><p class="p2">第2个p标签</p><p class="p3">第3个p标签</p><p>第4个p标签</p><p>第5个p标签</p></div>
</body>
<script>let res = document.createElement('h3');res.innerHTML = "这是一个h3标签";let div = document.querySelector('div');let bef = document.querySelector('.p3');let bef2 = document.querySelector(".p2");div.insertBefore(res, bef);div.insertBefore(res, bef2);</script>
</html>

注意2:

节点插入后,   对节点进行修改操作会对DOM树的内容进行影响

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div><h1>这是一个h1标签</h1><h1>这是一个h1标签</h1><h1 class="h1">这是一个h1标签</h1><h1>这是一个h1标签</h1><h1>这是一个h1标签</h1></div>
</body>
<script>let h1 = document.querySelector('.h1');let div = document.querySelector('div');let node = document.createElement('h3');node.innerHTML = "这是一个h3标签"div.insertBefore(node, h1);node.innerHTML = "修改后的h3标签"
</script>
</html>
删除节点
    let oldElement = fatherElement.removeChild(childElement);

fatherElement是父结点,  childElement是子节点,  removeChild的返回值是删除的子节点,  子节点虽然从DOM树中删除,  但是仍在内存中存在,  可以插入到其他位置

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="div1"><div>1</div><div>2</div><div class="div3">3</div><div>4</div><div>5</div></div>
</body>
<script>let div3 = document.querySelector('.div3');let div1 = document.querySelector('.div1');let old = div1.removeChild(div3);</script>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的功能代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 在中断机制实现按键检测的案例之后&#xff0c;我们介绍串…

Flink运行机制相关概念介绍

Flink运行机制相关概念介绍 1. 流式计算和批处理2. 流式计算的状态与容错3. Flink简介及其在业务系统中的位置4. Flink模型5. Flink的架构6. Flink的重要概念7. Flink的状态、状态分区、状态缩放&#xff08;rescale&#xff09;和Key Group8. Flink数据交换9. 时间语义10. 水位…

sky06笔记下

1.边沿检测 检测输入信号din的上升沿&#xff0c;并输出pulse module edge_check ( clk, rstn, din, pulse ); input wire clk,rstn; input wire din; output reg pulse;wire din_dly;always (posedge clk or negedge rstn)beginif(!rstn)din_dly < 1b0;elsedin_dly < d…

【Qt】:常用控件(四:显示类控件)

常用控件 一.Lable二.LCD Number 一.Lable QLabel 可以⽤来显⽰⽂本和图⽚. 代码⽰例:显⽰不同格式的⽂本 代码⽰例:显⽰图⽚ 此时,如果拖动窗⼝⼤⼩,可以看到图⽚并不会随着窗⼝⼤⼩的改变⽽同步变化 为了解决这个问题,可以在Widget中重写resizeEvent函数。当用户把窗口从A拖…

【Android、 kotlin】kotlin学习笔记

基本语法 fun main(){val a2var b "Hello"println("$ (a - 1} $b Kotlin!")} Variables 只赋值一次用val read-only variables with val 赋值多次用var mutable variables with var Standard output printin() and print() functions String templ…

【JavaScript】函数 ⑦ ( 函数定义方法 | 命名函数 | 函数表达式 )

文章目录 一、函数定义方法1、命名函数2、函数表达式3、函数表达式示例 一、函数定义方法 1、命名函数 定义函数的标准方式 就是 命名函数 , 也就是之前讲过的 声明函数 ; 函数 声明后 , 才能被调用 ; 声明函数的语法如下 : function functionName(parameters) { // 函数体 …

SpringBoot整合ELK8.1.x实现日志中心教程

目录 背景 环境准备 环境安装 1.JDK安装 2.安装Elasticsearch 3.安装zookeeper 4.安装Kafka 5.安装logstash 6.安装file beat 解决方案场景 1.日志采集 1.1 应用日志配置 1.1.1 创建logback-spring.xml文件 1.1.2 创建LoggerFactory 1.1.3 trace日志的记录用法 …

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1&#xff1a;运行查看有什么可以快捷使用的&#xff0c;更新了些什么&#xff0c;可不可以直接复制粘贴 主要内容&#xff1a;在web端中模拟手机类型的点击长按操作&#xff0c;不能直接运行在安卓与io…

解决VScode中matplotlib图像中文显示问题

一、更改配置文件 参考这个文件路径找到自己Python环境下的matplotlibrc文件并用记事本打开。 用ctrl F寻找下面的这两行并将前面的#删除&#xff0c;保存并退出。 font.family: sans-serif font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, N…

基于springboot实现校园资料分享平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校园资料分享平台演示 摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了校园资料分享平台的开发全过程。通过分析企业对于校园资料分享平台的需求&#xff0c;创…

WPF中通过自定义Panel实现控件拖动

背景 看到趋时软件的公众号文章&#xff08;WPF自定义Panel&#xff1a;让拖拽变得更简单&#xff09;&#xff0c;发现可以不通过Drag的方法来实现ListBox控件的拖动&#xff0c;而是通过对控件的坐标相加减去实现控件的位移等判断&#xff0c;因此根据文章里面的代码,边理解边…

跳跃游戏-java

题目描述: 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思想: …

Android 性能优化之黑科技开道(一)

1. 缘起 在开发电视版智家 App9.0 项目的时候&#xff0c;发现了一个性能问题。电视系统原本剩余的可用资源就少&#xff0c;而随着 9.0 功能的进一步增多&#xff0c;特别是门铃、门锁、多路视频同屏监控后等功能的增加&#xff0c;开始出现了卡顿情况。 经过调研分析发现有…

【蓝桥杯嵌入式】RTC——实时时钟

一、RTC简介 RTC RTC—real time clock&#xff0c;实时时钟&#xff0c;主要包含日历、闹钟和自动唤醒这三部分的功能&#xff0c;其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器&#xff0c;可直接输出时分秒&#xff0c;星期、月、日、年。 从Cubemx里的配置…

HTTPS传输过程

HTTPS&#xff1a;超文本传输安全协议 相较于HTTP明文传输&#xff0c;HTTPS增加了SSL/TLS进行了加密增加了通信的安全性。 SSL和TLS是两个不同的加密方法&#xff0c;SSL是TLS的前身&#xff0c;现在绝大多数浏览器使用的是TLS&#xff0c;所以着重了解以下TLS的概念即可。 首…

接口测试之测试原则、测试用例、测试流程......

一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&#xff08;API&#xff09;。 接口&#xff08;API&#xff09;是系统与系统之间&#xff0c;模块与模块之间或者…

Open3D(C++) 法向量精细化处理

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、平滑前1、平滑后本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用&#xff0c;显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

C++ 11是如何封装Thread库的?

引言 C11 标准引入了一个重要的特性&#xff0c;即原生线程支持&#xff0c;这标志着C语言在并发编程领域迈出了坚实的步伐。在此之前&#xff0c;开发人员在进行跨平台的多线程编程时&#xff0c;不得不依赖于操作系统提供的特定API&#xff0c;如Windows API或POSIX Threads…

接口调用成功后端却一直返回404

vuespringboot 我在vue.config.js中配置了向后端的反向代理 然后使用了axios向后端发送post请求 可以看到可以接收到前端传来的值 但是前端控制台却报了 “xhr.js:245POST http://localhost:7777/api/login 404 (Not Found)” 最后询问我那智慧的堂哥... ... 解决办法是把C…