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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Word中插入Endnote参考文献时显示乱码

近期在写文章需要插入参考文献&#xff0c;使用Endnote插入时显示乱码&#xff0c;如下图所示&#xff1a; 文章末尾显示{ADDIN EN REFILIST } 解决方法 在网上找了诸多方法尝试也没有解决&#xff0c;最终找到一篇博客介绍了一种方法&#xff1a; word选项—高级&#xff1…

16.springboot项目下使用事务(springboot-016-transaction)

事务是一个完整的功能&#xff0c;也叫作是一个完整的业务 事务只跟什么SQL语句有关&#xff1f;事务只跟DML语句有关系&#xff1a;增删改 DML,DQL,DDL,TCL,DCL 首先添加两个依赖以及MyBatis代码自动生成插件 <!--MySql驱动--><dependency><groupId>mysql…

【C++】探索C++中的类与对象(上)

​​ &#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ C是一种强大的编程语言&#xff0c;其面向对象的特性使得代码结构更加清晰、易于维护和扩展。在C中&#xff0c;类与…

Elasticsearch 压测实践总结

背景 搜索、ES运维场景离不开压力测试。 1.宿主机层面变更&#xff1a;参数调优 & 配置调整 & 硬件升级2.集群层面变更&#xff1a;参数调优3.索引层面变更&#xff1a;mapping调整 当然还有使用层面变更&#xff0c;使用API调优&#xff08;不属于该文章的讨论范围…

京东获得JD商品详情 API 接口(jd.item_get)的详细使用说明,包括如何通过该接口获取商品的基本信息,包括名称、品牌、产地、规格参数等

通过调用京东商品详情API接口&#xff0c;开发者可以获取商品的基本信息&#xff0c;如名称、品牌、产地、规格参数等。此外&#xff0c;还可以获取商品价格信息&#xff0c;包括原价、促销价和活动信息等。同时&#xff0c;该接口还支持获取商品的销量、评价、图片、描述等详细…

MySQL8.0.36 GTID主从同步失败排查

报错信息&#xff1a; Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 6f577885-e5d0-11ee-a94a-0242c0a80067:1 at source log 7364ffd6441c-bin.000006, end_lo…

C语言 | Leetcode C语言题解之3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; int lengthOfLongestSubstring(char * s) {//类似于hash的思想//滑动窗口维护int left 0;int right 0;int max 0;int i,j;int len strlen(s);int haveSameChar 0;for(i 0; i < len ; i ){if(left < right){ //检测是否出现重…

编译好的C++应用程序拷贝到其它电脑,提示dll未找到依赖项的解决方法。

编译好的C应用程序拷贝到其它电脑上&#xff0c;运行时出现提示dll未找到依赖项。 由于dll依赖于其它dll&#xff0c;在开发用电脑上的环境不能完全与其它电脑相同。 解决办法是找到调用到的dll依赖的所有dll&#xff0c;拷贝到运行目录下。 在开发电脑上&#xff1a; 1、开…

7.stack容器的使用

文章目录 stack容器常用接口代码工程运行结果 stack容器 常用接口 /*1.push - 入栈*/ /*2.top - 查看栈顶元素*/ /*3.pop - 出栈*/代码工程 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stack>using namespace std;/*1.push - 入栈*/ /*2.top…

Advanced RAG 01:讨论未经优化的 RAG 系统存在的问题与挑战

编者按&#xff1a; 自 2023 年以来&#xff0c;RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能严重依赖RAG&#xff0c;优化其性能、提高检索效率和准确性迫在眉睫&#xff0c;成为当前 RAG 相关研究的核心问题。 我们今天为大家带来的这…

书生·浦语 demo1

部署 InternLM2-Chat-1.8B 模型进行智能对话 环境配置 进入开发机后&#xff0c;在 terminal 中输入环境配置命令 studio-conda -o internlm-base -t demo上面命令执行完后&#xff0c;conda会多一个虚拟环境 使用conda activate demo切换环境后&#xff0c;继续后面操作 …

SAP FI学习笔记04 - 基础知识 - 新规会计科目,用 应收账款科目 做个例子

上一章讲了 应付账款 的来源及操作。 SAP FI学习笔记03 - 应付账款-CSDN博客 本章先尝试做一个会计科目&#xff0c;然后再用 应收账款 科目做个例子。 应收账款 和 应付账款 一样&#xff0c;也有两个视图。 1&#xff0c;新建几个会计科目 这一章来尝试着创建会计科目。 …

中国智慧城管哪家做的好?

智慧城市管理综合执法系统建立全市统一的法律法规、裁量基准、执法事项、执法文书和基础信息库&#xff0c;实现从获取线索、立案、调查、处理到结案全过程的信息化和文书制作的智能化。全面支持移动执法办案&#xff0c;提高执法效率。 技术架构&#xff1a; 微服务javasprin…

每日一题:用c语言中指针实现除2操作

目录 一、要求 二、实现代码 三、实现结果 四、关于指针的相关知识 一、要求 二、实现代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void change(int *i) {*i*i/2; }int main() {int i;printf("请您输入一个整数&#xff1a;");scanf(&quo…

ABAP开发中常用弹窗的应用详解

在ABAP程序设计中为提示和交互的需要会经常用到弹窗&#xff0c; 所谓弹窗就是弹出一个框&#xff0c;告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等&#xff0c;它价值在于通过提示、提醒、警告&#xff0c;帮助用户顺利完成业务流程中的必要操作或给用户提供实…

实时渲染 -- 材质(Materials)

一、自然界中的材质 首先了解下自然界中的材质 如上这幅图&#xff0c;不同的物体、场景、组合&#xff0c;会让我们看到不同的效果。 我们通常认为物体由其表面定义&#xff0c;表面是物体和其他物体或周围介质之间的边界面。但是物体内部的材质也会影响光照效果。我们目前只…

Day30 回溯 LeedCode 332.重新安排行程 51. N皇后 37. 解数独

332. 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 JFK…

腾讯云4核8G服务器多少钱?4C8G可以干啥?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

Day18-【Java SE进阶】多线程

一、线程 1. 什么是线程? 线程(Thread)是一个程序内部的一条执行流程。程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 2. 多线程 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行) 3. 如何在程序中创建出多条线程? Ja…

全局统一返数据类型封装记录

全局统一返回值封装 ​ 在Spring Boot中&#xff0c;实现全局统一返回值封装是一种常见的做法&#xff0c;它有助于保持API的一致性&#xff0c;并简化前端对响应数据的处理。创建一个响应体类&#xff0c;包含状态码、消息、数据等字段。这个类可以作为所有控制器返回值的通用…