JavaScript(DOM)

JavaScript的DOM(JS) 目录 1.DOM概述 2.获取HTML元素 3.修改HTML 4 修改CSS样式 5.元素操作 6.DOM事件 7.EvenListener监听事件 1.DOM概述 通过 HTML DOM,使用 JavaScript访问 HTML 文档的所有元素。 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对... 阅读详情

DOM:document object model  -  文档对象模型

利用对象模型操作html文档的

顶层对象        -        document

html 基本结构

标签

html   -  console.log(document.documentElement)

body  -  console.log( document.body );

head  -  console.log( document.head)

文本 - title  - console.log( document.title)

修改标签    -  document . title  =  '你好'

标签获取

1.通过id名来获取 - 方法 - document.getElementById('id名')

2.通过标签名来获取 - 方法 - document.getElementsByTagName('标签名') - 获取到的是一个集合,集合中会将当前页面中所有当前标签都获取到,哪怕只有一个,也是集合

3.通过类名来获取 - 方法 - document.getElementsByClassName('类名') - 获取到的也是集合

4.通过标签的name属性 - 方法 - document.getElementsByName('name属性的值')

5.通过css选择器来获取一个标签 - 方法 - document.querySelector('css选择器') - 获取到满足css选择器的第一个标签

6.通过css选择器来获取所有满足css选择器的标签们 - 方法 - document.querySelectorAll(css选择器)

关系获取:

    获取所有子标签:父.chlidren

    获取第一个子标签:父.firstElementChild

    获取最后一个子标签:父.lastElementChild

    获取父标签:子.parentElement

    获取下一个兄弟标签:哥哥.nextElementSibling

    获取上一个兄弟标签:弟弟.previousElementSibling

内容操作

获取文本内容   innerText

获取到的标签  . innerText

设置   标签.innerText = 值

操作纯文本 - 获取只能获取文本 / 设置标签不被解析

获取带标签的内容        innerHTML

获取到的标签  . innerHTML 

设置   标签.innerHTML = 值

操作带标签的内容  -  获取连标签也能获取到 / 设置标签能被解析

表单元素内容:value

表单元素.value

表单元素.value = 值

设置类名        className

<style>
    .box{
        width: 100px;
        height: 100px;
        border: 1px solid #000;
    }
    .red{
        background-color: #f00;
    }
</style>
<body>
<div class="box"></div>
<button>按钮</button>
</body>
<script>
var btn = document.querySelector('button');
var box = document.querySelector('.box');
btn.onclick = function() {
    // 给box设置类名
    /*
    标签.className = '类名'
    */
    box.className = 'box red'
    // box.className = ''
}
</script>

类名设置dome

<style>
    ul{
        list-style-type: none;
        padding: 0;
        margin: 0;
    }
    ul:after{
        content: '';
        display: block;
        clear: both;
    }
    ul li{
        float:left;
        padding: 5px 10px;
        margin: 5px 10px;
        border: 1px solid #ccc;
    }
    ul li.active{
        background-color: #f00;
        color: #fff;
    }
</style>
<ul>
    <li class="active">导航1</li>
    <li>导航2</li>
    <li>导航3</li>
</ul>
</body>
<script>
/*
获取标签
循环绑定事件
添加点击
将所有的li类名的清空
给当前点击的li添加类名active
*/ 
var lis = document.querySelectorAll('ul li');
for(i=0; i<lis.length; i++){
    lis[i].onclick = function(){
        for(j=0;j<lis.length;j++){
            lis[j].className=''
        }
        this.className = 'active'
    }
}
</script>

设置样式

获取:window.getComputedStyle(标签)      返回所有css键值对组成的对象

语法:标签.style.css键 = 值(除了数字以外,所有的值都是字符串)

<style>
    .box{
        width: 100px;
        height: 100px;
        background-color: #f00;
    }
</style>
<body>
<div class="box"></div>
<button>按钮</button>
</body>
<script>
var btn = document.querySelector('button');
var box = document.querySelector('.box');
btn.onclick = function() {
    // 修改box的样式 
    // box.style.background-color = '#0f0'
    // box.style
    // box.style['background-color'] = '#0f0'
    box.style.width = '300px'

    // 在设置样式的时候,如果css键里面包含了连字符,可以将键包含的两个单词做小驼峰写法
    // box.style.backgroundColor = '#0f0'
    // box['style'].backgroundColor = '#00f'
    box['style']['backgroundColor'] = '#00f'
}
console.log(window.getComputedStyle(box));
console.dir(window.getComputedStyle);
</script>

属性操作

操作标签属性

设置属性

添加属性 -  标签.setAttribute(键, 值)

修改属性 - 标签.setAttribute(键, 值)

获取属性的值   - 标签.getAttribute(键)

删除属性  -  标签.removeAttribute(键)

利用属性操作设置样式

div.setAttribute('style','width:100px;height:100px;background-color:#0f0;')

利用属性操作设置类名

div.setAttribute('class', 'border')

获取到的标签其实都是对象,使用console.dir()可以输出对象的样子,既然是对象,就可以像对象一样进行属性操作

节点操作

1.创建节点 - document.createElement('标签名')

var div = document.createElement('div')
console.log(div)

2.插入节点

        将标签放到父标签的末尾作为子标签 - 父标签.appendChild(子标签-标签对象)

var b = document.createElement('b')
b.innerText = '哈哈'

// // 将b标签放到body中
document.body.appendChild(b)

        将新标签放到某个已经存在的子标签的前面 - 父标签.insertBefore(新标签,已经存在的子标签)

var i = document.createElement('i')
i.innerText = '嘿嘿'

// // 把i标签放在b标签的前面
document.body.insertBefore(i, b)

3.替换节点   - 父标签.replaceChild(新标签,已经存在的子标签)

var s = document.createElement('s')
s.innerText = '嘻嘻'

// // 用s将i替换掉
document.body.replaceChild(s, i)

4.复制节点 - 标签.cloneNoed() - 默认只能复制空标签

// // var newB = b.cloneNode()  //一般不用

// // 如果要讲标签内部的内容也复制出来,需要给cloneNode方法添加参数 - true
var newB = b.cloneNode(true)
console.log(newB);
// console.dir(newB);

5.删除节点   - 父标签.removeChild(被删除的子标签)

document.body.removeChild(s)

 节点dome

利用节点操作实现表格删除

 <style>
        td:last-child{
            background-color: #abcdef;
        }
    </style>
</head>
<body>
    <table border=1 width="500">
        <thead>
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>成名绝技</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            
        </tbody>
    </table>
</body>
<script>
var arr = [
    {
        name:"令狐冲",
        age:20,
        sex:"男",
        skill:"独孤九剑"
    },
    {
        name:"东方不败",
        age:50,
        sex:"女",
        skill:"葵花宝典"
    },
    {
        name:"任我行",
        age:55,
        sex:"男",
        skill:"吸星大法"
    }
];

/*
获取tbody
循环遍历tr  td
创建  tr 放入tbody中    td放入tr中
用函数包含循环,并调用
创建删除表格
遍历添加点击事件
*/
var tbody = document.querySelector('tbody');
loadHTML()
function loadHTML(){
        for(i=0; i<arr.length;i++){
        var obj = arr[i]
        var tr = document.createElement('tr');
        tbody.appendChild(tr)
        var td = document.createElement('td')
        tr.appendChild(td)
        td.innerText = i+1
        for(var j in obj){
            var td = document.createElement('td')
            td.innerText = obj[j]
            tr.appendChild(td)
        }
        var td = document.createElement('td')
        td.innerText = '删除'
        tr.appendChild(td)
    }
}
var tds = document.querySelectorAll('td:last-child');
for(var k=0;k<tds.length;k++){
    tds[k].onclick = function(){
        tbody.removeChild(this.parentElement)
    }
}
</script>

获取元素(坐标、大小)

元素坐标

标签.offsetLeft

标签.offsetTop

获取到的是相对于设置过定位的父元素的位置

top是个关键字,代表window

<style>
    .big{
        width: 300px;
        height: 300px;
        background-color: #f00;
        position: relative;
    }
    
    .small{
        width: 100px;
        height: 100px;
        background-color: #00f;
        position:absolute;
        left: 100px;
        top: 100px;
    }
    </style>
</head>
<body>
<div class="big">
    <div class="small"></div>
</div>
<button>按钮</button>
</body>
<script>
// 获取small的位置
var small = document.querySelector('.small')
var left = small.offsetLeft
var t = small.offsetTop
console.log(left, t);

document.querySelector('button').onclick = function(){
    var timer = setInterval(function(){
        var t = small.offsetTop
        // console.log(t);
        t += 2
        if(t >= 400){
            t = 400
            clearInterval(timer)
        }
        small.style.top = t + 'px'
    }, 10)
}
</script>

元素大小

1.标签.clientWidth   标签.clientHeight  -   获取到的是不包含表边框大小

var box = document.querySelector('.box')
var w = box.clientWidth
var h = box.clientHeight
console.log(w,h);

2.标签.offsetWidth     标签.offsetHeight - 获取到的是包含边框的大小

var w = box.offsetWidth
var h = box.offsetHeight
console.log(w,h);

获取元素窗口大小

1.包含滚动条窗口大小

window.innerWidth

window.innerHeight

2.不包含滚动条的窗口大小

document.documentElement.clientWidth

document.documentElement.clientHeight

var w = document.documentElement.clientWidth

console.log(w);

var h = document.documentElement.clientHeight

console.log(h);

3.获取body大小

document.body.clientWidth

document.body.clientHeight

var w1 = document.body.clientWidth

var h1 = document.body.clientHeight

console.log(w1 ,h1);

获取滚动过的距离

有文档声明的写法

document.documentElement.scrollTop

document.documentElement.scrollLeft

没有文档声明的写法

document.body.scrollTop

document.body.scrollLeft

兼容写法

var t = document.documentElement.scrollTop || document.body.scrollTop

document.documentElement.scrollTop = document.body.scrollTop = 值

短路运算

短路运算就是一种赋值操作,只是其中有&&和||参与了。将连接的两个值经过判断选择其中一个赋值给变量

|| 或者,左边的数据会转成布尔值,根据或者来进行判断是否能得到true,如果左边是true,或者 连接的整体已经可以得到true,此时就会将第一个数据赋值给变量

如果左边是false,就会将第二个数据赋值给变量了

var a = 1 || 2 //1
var a = 0 || false  //false

var a = 1 && 2  //2
var a = 0 && 1  //0

【JavaScript】JS+DOM实现图片库 【前言】        前面写过的JS博客有提过DOM,理论的知识有了一些了解还远远不不够,动手实践一个小例子会让你印象更加深刻。本篇博客借鉴《JavaScript DOM 编程艺术》中的小例子,希望可以给读者带来收获!        【有关图片库的思考】        把图片放到网页上显示不是什么难事,方法有很多种。简单放入一个网页中未尝不可,但是当图片数量越来越多的时候,网页标记代码没多少,但... 阅读详情

相关推荐

js:对dom元素class属性进行读取、更新、移除操作

综上,一共有三种方式对dom元素class属性进行读取、更新、移除操作。DOMTokenList对象。

彭世瑜的博客 2477

js对dom的class的操作

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js对dom的class的操作</title> <!-- dom对类属性的操作: 如果是js对style中某一个属性的修改,js每改变一次style属性 就得去重新渲染一次浏览器 我们可以使用css的class 让js执行一次换多个属性优化 --.

weixin_46564011的博客 1819

python cartopy绘制扇形区域图/cartopy绘制北极部分区域

实际上,这个问题原因还是由于投影转换的问题,在set_extend时,绘制的上下边界仍然是方形、未被正确投影的边界,与我们的set_boundary存在冲突,最根本的原因还是在于cartopy对于投影计算的一些缺陷。另外我们需要指出的是:**该方法不适用于极地投影,即NorthPolarStereo,由于NorthPolarStereo本身投影特性只需一个参数,本身并不适合。我们绘制极地投影时,同样也是使用set_boundary绘制圆形边界,那么当我们想要绘制扇形时,可以通过。请根据喜好自行选择,

weixin_43750300的博客 3212

原生js给DOM元素添加一个或者多个类的方法总结

先看两个例子: html: 啦啦啦 css: .test{ width: 100px; height: 100px; background: #B6BAC4; } .test1{ border: 1px solid; width: 200px; border-radius: 4px; } .test2{ margin: 0 auto; } .test3{

涂涂 5万+

无痛安装及初始配置 PHP 8.0.3 + Apache 2.4 + MySQL 8.0

PHP 8.0.3 + Apache 2.4 + MySQL 8.0MySQL 8.0.23 安装下载安装配置环境变量初始化MySQLPHP8.0.3 安装下载安装配置环境变量Apache 2.4 安装下载安装启动 MySQL 8.0.23 安装 下载 到官方网站下载:https://dev.mysql.com/downloads/mysql/ 目前的最新版本是MySQL 8.0.23 在Windows上有两种安装方式,一个是zip压缩文件解压然后配置,另一个是图像化界面安装。 这里选择第一种方法安装:

Kuang Da's Blog 6208

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南

本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。

yhn456789的博客 623

js为dom元素添加class名

代码如下: <div class="aa bb cc" id='name'></div> <script type="text/javascript"> function addClass(el, className){ if(hasClass(el, className)){ return } var newClass = el...

mm_hello11的博客 7022

脉冲变压器电感选型参数,结构原理,工艺与注意问题总结

脉冲变压器电感简称脉冲变压器,是一种特殊类型的变压器,主要用于处理脉冲信号。它的主要特性是能够在短时间内承受高电压和大电流。脉冲变压器主要用于开关电源、脉冲功率放大、雷达脉冲调制等领域。本文对脉冲变压器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1342

JavaScript——DOM

文档对象模型(简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式...

super码力的博客 3356

基于Multisim/TINA的H桥电机驱动电路设计与仿真分析

摘要 本文基于Multisim/TINA仿真平台,对H桥电机驱动电路进行了系统设计与分析。研究重点包括H桥拓扑结构的工作原理、PWM调速控制方法以及两种驱动方案对比分析。通过光耦隔离驱动与IR2110专用驱动IC的仿真对比,验证了IR2110自举电路在高低侧驱动中的优势。仿真实验着重分析了死区时间对防止直通现象的关键作用,并建立了直流电机的R-L-E等效模型进行动态特性仿真。结果表明,采用IR2110驱动方案配合适当的栅极电阻和自举电容参数,能够实现电机的高效双向调速控制。本研究为实际电机驱动系统的设计提供

huanghm88的专栏 137

[RK3568 Android11] 教程之原厂SDK源码适配AIO-3568J板子跑起来

目录 一、前提 二、修改dts设备树 三、适配板子的dts 四、编译系统烧入固件验证 一、前提 因源码是直接使用原厂的SDK,没有使用firefly配套的SDK源码,所以手上这块firefly aio-3568j板子在硬件设计上与原厂使用的板子会有些差异;就是因为这些差异会导致新固件烧入后,debug串口打印许多错误信息,可能的话,系统还会崩溃掉,跑不起来; 主要差异在哪里呢?比如: ● DDR类型和品牌多样性; ...

~未来可期~ 1744

html dom与js区别,【JS】 Javascript与HTML DOM的互动 寻路

JS HTML DOMDOM的全程是Document Object Module,即文档对象模型。一般来说,当一个页面被加载时,浏览器会在内部创建一个当前文档的DOM。就像用python的Etree之类的模块解析xml文件时建立的对象一样,浏览器建立的DOM对象抽象了整个html文件,并且形成了一颗html元素的树。而JS,就被赋予了和这种DOM互动的能力。也就是说,JS可以通过增删改查DOM来实...

weixin_39847244的博客 152

《QT+PCL》点云配准进阶——GROR配准

GROR点云配准

阁楼 1318

探索 Vanilla JS DOM:纯JavaScript的DOM操作库

在前端开发中,我们常常依赖于诸如jQuery或Vue.js等库来处理DOM(文档对象模型)操作。然而,随着浏览器原生API的日益成熟,使用原生JavaScript进行DOM操作变得更为高效且简洁。 是一个轻量级的项目,旨在提供一套实用的工具函数,帮助开发者用纯JavaScript更方便地操作DOM。 ## 项目简介 Vanilla JS DOM 是一个由 开发的小型库,它封装了一些常见的DOM

gitblog_00087的博客 724

ParaView: GUI 轴网格

ParaView: GUI 轴网格

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1923

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaScript——DOM编程、JS的对象和JSON

JavaScript——DOM编程、JS的对象和JSON

雷神乐乐的博客 1546

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JS(JavaScript)的DOM操作

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 十步杀一人,千里不留行。 事了拂衣去,深藏身与名。 ——《侠客行》 文章目录DOM操作1. DOM介绍2. 查询操作2.1 查询方法2.2 查询示例2.2.1 根据id获取dom2.2.1.1 示例2.2.1.2 结果2.2.2 根据tag获取dom2.2.2.1 示例2.2.2.2 结果2.2.3 根据css样式获取dom2.

感谢阅读 1735

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

js--JavaScript与DOM之间的关系

前言 内容 类型简介 js中数字是浮点类型,而且是不精确的类型 字符串 json案例 数组 构造方法域对象 构造方法是原型继承的载体 构造方法 实现步骤 添加成员 js支持动态成员 类型的转换与包装对象 基本类型的转换 数字转字符串 字符串转数字 转化成boolean 包装类型 常用对象 正则表达式 元字符 基本元字符 限定元字符: 首位元字符: 简写元字符: 在JavaScrip...

罗俊 1017

【JavaScript学习总结】【5】、JS DOM

当页面加载时,浏览器会创建页面的文档对象模型(Document Object Model)。文档对象模型定义访问和处理 HTML 文档的标准方法。DOM 将 HTML 文档呈现为带有元素、属性和文本的树结构,即节点树。通过 DOM,JS 可创建动态的 HTML,可以使网页显示动态效果并实现与用户的交互功能。JS 能够改变页面中所有的 HTML 元素、属性和 CSS 样式,并对页面中所有事件做出响应。所以学习 JS 的起点就是处理网页,处理网页就需要使用 DOM 进行操作。

lily19970107的博客 207

Flippy.js:实现流畅DOM变化的JavaScript库

Flippy.js:实现流畅DOM变化的JavaScript库 Flippy.js 是一个使用 JavaScript 编写的开源项目,旨在帮助开发者轻松实现 DOM 元素的动画效果。该项目以简单易用和高效性能为核心特点,支持多种模块化引入方式,适用于不同的开发场景。 1. 项目基础介绍和主要编程语言 Flippy.js 是一个基于 JavaScript 的开源库,利用 FLIP 动画技术,可以轻松...

gitblog_00832的博客 644

推荐 DOM.js: 一个轻量级的 JavaScript 库

推荐 DOM.js: 一个轻量级的 JavaScript 库 DOM.js 是一个轻量级、模块化的 JavaScript 库,用于操作和管理 HTML 和 XML 文档对象模型 (DOM)。它旨在提供一套简洁而强大的 API,帮助开发者更高效地处理页面上的元素和事件。 项目介绍 DOM.js 提供了一系列实用的方法,用于简化常见的 DOM 操作任务,例如创建新元素、查找现有元素、添加和删除类名、设...

gitblog_00023的博客 450

JavaScript DOM编程

目录 一、什么是DOM? 二、动态改变文档内容的原理 三、Element常用属性 四、常用方法 1.创建和增加节点的方法 2.删除和替换节点的方法: 3.其他方法 五、使用JS操作表格 总结: 一、什么是DOM? 文档对象模型(Document Object Model) 通过DOM可以动态改变文档内容 二、动态改变文档内容的原理 解析文档(如HTML)并生成DOM树 通过DOM标准接口+编程语言改变文档内容 解析文档生成DOM树的过程 .

weixin_62270300的博客 967

JavaScript dom编程-在什么位置编写js代码

JavaScript dom编程-在什么位置编写js代码 在什么位置编写js代码合适呢? 总结:js代码写在head标签中,并且放在title标签后面,写在script标签中,但是最好不要直接写在script标签中,而是写在window.onload事件的function里边的函数体中最合适,参照如下写法是比较规范的写法: &lt;html&gt; &lt;head&gt; &lt;meta...

一只苟延残喘的卑微蝼蚁 852

Hy-MT2-1.8B 许可与合规指南:翻译模型 MIT 协议、AMD EULA 与商用注意事项完整详解

本文以 **Hy-MT2-1.8B_rai_1.9.0_m_1.0.1_npu**(AMD 发布的 1.8B 参数多语言机器翻译模型)为例,讲解它的许可与合规要点:如何读懂模型卡片中的 `license: other` 声明、MIT 协议与 AMD EULA 的关键差异、商用落地前的合规清单,帮助你在集成这款翻译模型前避开常见的授权坑。 ## 1️⃣ 先看仓库:这个模型到底声明了什么许可? 打

gitblog_01055的博客 321

深入理解 JavaScript DOM 操作

以上只是 DOM 操作的一些基本示例,DOM 提供了丰富的方法和属性来操作和管理网页的结构和内容。通过灵活运用 DOM 操作,可以实现各种动态的网页效果和交互功能。需要注意的是,在进行 DOM 操作时要谨慎,过度频繁的操作可能会导致性能问题。此外,还要注意浏览器的兼容性,不同的浏览器可能对 DOM 操作的支持有所差异。希望这篇博客对你理解和掌握 JavaScript DOM 操作有所帮助!null。

2301_81146427的博客 2566

JavaScript DOM基础

本文简单的讲解了JavaScript的DOM基础,适合初学的朋友们,如果本文对你有所帮助请三连支持博主,你的支持是我更新的动力。以下是本篇文章正文内容一个完整的JavaScript实现由以下3个不同部分组成核心(ECMAScript)语言核心部分,描述了该语言的语法和基本对象。文档对象模型(DocumentObjectModel,DOM)网页文档操作标准,描述处理网页内容的方法和接口。浏览器对象模型(BOM)客户端和浏览器窗口操作基础,描述与浏览器进行交互的方法和接口。编程接口。......

程序员柒的博客 2420
上一篇: JavaScript(事件)
下一篇: JavaScript(事件二)
APLL_
博客等级 码龄5年 27粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值