DOM(一)

DOM(一)

1.什么是DOM

文档对象类型,是 W3C 组织推荐的处理可扩展标记语言的标准编程接口

通过这些 DOM 接口可以改变网页的内容、结构和样式

2.DOM树

在这里插入图片描述

文档:一个页面就是一个文档,DOM 使用 document 表示

元素:页面中的所有标签都是元素,DOM 中使用 element 表示

节点:网页中的所有内容都是节点,DOM 中使用 node 表示

Dom把以上内容都看作是对象

3.获取元素

(1)获取元素的方式

① 根据ID获取

② 根据标签名获取

③ 通过HTML5新增方法获取

④ 特殊元素获取

(2)根据ID获取

使用 getElementById() 方法可以获取带有ID的元素对象

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
		<div id="time">
			2021-03-04
		</div>
		<script>
			// 1. 因为我们文档页面从上往下加载,所以先得有标签 所以我们script写到标签的下面
			// 2. get 获得 element 元素 by 通过 驼峰命名法 
			// 3. 参数 id是大小写敏感的字符串
			// 4. 返回的是一个元素对象
			var timer = document.getElementById('time');
			console.log(timer);
		</script>
	</body>
</html>

在这里插入图片描述

(3)根据标签名获取

使用 getElementsByTagName() 方法可以返回带有指定标签名的对象的集合

例子
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
		<ul>
			<li>知否知否,应是绿肥红瘦1</li>
			<li>知否知否,应是绿肥红瘦2</li>
			<li>知否知否,应是绿肥红瘦3</li>
			<li>知否知否,应是绿肥红瘦4</li>
			<li>知否知否,应是绿肥红瘦5</li>
		</ul>
		<ol id="ol">
		        <li>生僻字</li>
		        <li>生僻字</li>
		        <li>生僻字</li>
		        <li>生僻字</li>		
		</ol>
		<script>
			//1.返回值是获取元素对象的集合,以伪数组形式存储
			var lis = document.getElementsByTagName('li');
			console.log(lis);
			console.log(lis[0]);
			// 2. 我们想要依次打印里面的元素对象我们可以采取遍历的方式
			for (var i = 0; i < lis.length; i++) {
			    console.log(lis[i]);
			}
			// 3. 如果页面中只有一个li 返回的还是伪数组的形式 
			// 4. 如果页面中没有这个元素 返回的是空的伪数组的形式
			// 5. element.getElementsByTagName('标签名'); 父元素必须是指定的单个元素
			// var ol = document.getElementsByTagName('ol'); // [ol]
			// console.log(ol[0].getElementsByTagName('li'));
			var ol = document.getElementById('ol');
			console.log(ol.getElementsByTagName('li'));
		</script>
	</body>
</html>

在这里插入图片描述

(4)通过HTML5新增方法获取

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <div class="box">盒子1</div>
	    <div class="box">盒子2</div>
	    <div id="nav">
	        <ul>
	            <li>首页</li>
	            <li>产品</li>
	        </ul>
	    </div>
	    <script>
	        // 1. getElementsByClassName 根据类名获得某些元素集合
	        var boxs = document.getElementsByClassName('box');
	        console.log(boxs);
	        // 2. querySelector 返回指定选择器的第一个元素对象  切记 里面的选择器需要加符号 .box  #nav
	        var firstBox = document.querySelector('.box');
	        console.log(firstBox);
	        var nav = document.querySelector('#nav');
	        console.log(nav);
	        var li = document.querySelector('li');
	        console.log(li);
	        // 3. querySelectorAll()返回指定选择器的所有元素对象集合
	        var allBox = document.querySelectorAll('.box');
	        console.log(allBox);
	        var lis = document.querySelectorAll('li');
	        console.log(lis);
	    </script>
	</body>
</html>

在这里插入图片描述

(5)获取特殊元素(body,html)

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <script>
	        // 1.获取body 元素
	        var bodyEle = document.body;
	        console.log(bodyEle);
	        console.dir(bodyEle);
	        // 2.获取html 元素
	        // var htmlEle = document.html;
	        var htmlEle = document.documentElement;
	        console.log(htmlEle);
	    </script>
	</body>
</html>

在这里插入图片描述

4.事件基础

(1)执行事件的步骤

① 获取事件源

② 注册事件(绑定事件)

③ 添加事件处理程序(采取函数赋值形式)

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <div>123</div>
	    <script>
	        // 执行事件步骤
	        // 点击div 控制台输出 我被选中了
	        // 1. 获取事件源
	        var div = document.querySelector('div');
	        // 2.绑定事件 注册事件
	        // div.onclick 
	        // 3.添加事件处理程序 
	        div.onclick = function() {
	            console.log('我被选中了');
	        }
	    </script>
	</body>
</html>

当选中盒子时,控制台显示我被选中的次数

在这里插入图片描述

(2)常见的鼠标事件

鼠标事件触发事件
onclick鼠标点击左键触发
onmouseover鼠标经过触发
onmouseout鼠标离开触发
onfocus获得鼠标焦点触发
onblur失去鼠标焦点触发
onmousemove鼠标移动触发
onmouseup鼠标弹起触发
onmousedown鼠标按下触发

5.操作元素

(1)改变元素内容

① element.innerText

从起始位置到终止位置的内容,但他去除html标签,同时空格和换行也会换掉

例子
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <button>显示当前系统时间</button>
	    <div>某个时间</div>
	    <p></p>
	    <script>
	        // 当我们点击了按钮,div里面的文字会发生变化
	        // 1. 获取元素 
	        var btn = document.querySelector('button');
	        var div = document.querySelector('div');
	        // 2.注册事件
	        btn.onclick = function() {
				div.innerText = '2021-3-4';
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
我们改进一下,直接获取当前系统时间

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <button>显示当前系统时间</button>
	    <div>某个时间</div>
	    <p></p>
	    <script>
	        // 当我们点击了按钮,div里面的文字会发生变化
	        // 1. 获取元素 
	        var btn = document.querySelector('button');
	        var div = document.querySelector('div');
	        // 2.注册事件
	        btn.onclick = function() {
				div.innerHTML = getDate();
			}
			function getDate() {
				var date = new Date();
				var year = date.getFullYear();
				var month = date.getMonth() + 1;
				var dates = date.getDate();
				var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
				var day = date.getDay();
				return '今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day];
			}
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
当然,我们元素也可以不用添加事件,直接显示当前系统时间

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <button>显示当前系统时间</button>
	    <div>某个时间</div>
	    <p>abcd</p>
	    <script>
	        // 当我们点击了按钮,div里面的文字会发生变化
	        // 1. 获取元素 
	        var btn = document.querySelector('button');
	        var div = document.querySelector('div');
	        // 2.注册事件
	        btn.onclick = function() {
				div.innerHTML = getDate();
			}
			function getDate() {
				var date = new Date();
				var year = date.getFullYear();
				var month = date.getMonth() + 1;
				var dates = date.getDate();
				var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
				var day = date.getDay();
				return '今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day];
			}
			// 我们元素可以不用添加事件
			    var p = document.querySelector('p');
			    p.innerHTML = getDate();
	    </script>
	</body>
</html>

在这里插入图片描述

② element.innerHTML

起始位置到终止位置的全部内容,包括html标签,同时保留空格和换行

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <div></div>
	    <p>
	        我是文字
	        <span>123</span>
	    </p>
	    <script>
	        // innerText 和 innerHTML的区别 
	        // 1. innerText 不识别html标签 非标准  去除空格和换行
	        var div = document.querySelector('div');
	        // div.innerText = '<strong>今天是:</strong> 2021';
	        // 2. innerHTML 识别html标签 W3C标准 保留空格和换行的
	        div.innerHTML = '<strong>今天是:</strong> 2021';
	        // 这两个属性是可读写的  可以获取元素里面的内容
	        var p = document.querySelector('p');
	        console.log(p.innerText);
	        console.log(p.innerHTML);
	    </script>
	</body>
</html>

在这里插入图片描述

(2)常用元素的属性操作

1. innerText、innerHTML 改变元素内容

2. src、href

3. id、alt、title

例子:修改链接
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
		        img {
		            width: 300px;
		        }
			</style>
	</head>
	<body>
	    <button id="ldh">刘德华</button>
	    <button id="zxy">张学友</button> <br>
	    <img src="images/ldh.jpg" alt="" title="刘德华">
	
	    <script>
	        // 修改元素属性  src
	        // 1. 获取元素
	        var ldh = document.getElementById('ldh');
	        var zxy = document.getElementById('zxy');
	        var img = document.querySelector('img');
	        // 2. 注册事件  处理程序
	        zxy.onclick = function() {
	            img.src = 'images/zxy.jpg';
	            img.title = '张学友';
	        }
	        ldh.onclick = function() {
	            img.src = 'images/ldh.jpg';
	            img.title = '刘德华';
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
案例练习

需求:上午打开页面显示上午好,显示上午的图片

需求:上午打开页面显示下午好,显示下午的图片

需求:上午打开页面显示晚上好,显示晚上的图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
		        img {
		            width: 300px;
		        }
			</style>
	</head>
	<body>
	    <img src="images/s.gif" alt="">
	    <div>上午好</div>
	    <script>
	        // 根据系统不同时间来判断,所以需要用到日期内置对象
	        // 利用多分支语句来设置不同的图片
	        // 需要一个图片,并且根据时间修改图片,就需要用到操作元素src属性
	        // 需要一个div元素,显示不同问候语,修改元素内容即可
	        // 1.获取元素
	        var img = document.querySelector('img');
	        var div = document.querySelector('div');
	        // 2. 得到当前的小时数
	        var date = new Date();
	        var h = date.getHours();
	        // 3. 判断小时数改变图片和文字信息
	        if (h < 12) {
	            img.src = 'images/s.gif';
	            div.innerHTML = '上午好,好好肝代码';
	        } else if (h < 18) {
	            img.src = 'images/x.gif';
	            div.innerHTML = '下午好,好好肝代码';
	        } else {
	            img.src = 'images/w.gif';
	            div.innerHTML = '晚上好,好好肝代码';
	        }
	    </script>
	</body>
</html>

因为我打开页面的时间是晚上,所以显示的是晚上哦,其他感兴趣的伙伴们通过写这段代码在不同时间测试。

在这里插入图片描述

(3)表单元素的属性操作

利用DOM可以操作表单以下属性

type、value、checked、selected、disabled

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
	</head>
	<body>
	    <button>按钮</button>
	    <input type="text" value="输入内容">
	    <script>
	        // 1. 获取元素
	        var btn = document.querySelector('button');
	        var input = document.querySelector('input');
	        // 2. 注册事件 处理程序
	        btn.onclick = function() {
	            // input.innerHTML = '点击了';  这个是 普通盒子 比如 div 标签里面的内容
	            // 表单里面的值 文字内容是通过 value 来修改的
	            input.value = '被点击了';
	            // 如果想要某个表单被禁用 不能再点击 disabled  我们想要这个按钮 button禁用
	            // btn.disabled = true;
	            this.disabled = true;
	            // this 指向的是事件函数的调用者 btn
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
案例:仿京东显示密码
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
		        .box {
		            position: relative;
		            width: 400px;
		            border-bottom: 1px solid #ccc;
		            margin: 100px auto;
		        }
		        
		        .box input {
		            width: 370px;
		            height: 30px;
		            border: 0;
		            outline: none;
		        }
		        
		        .box img {
		            position: absolute;
		            top: 2px;
		            right: 2px;
		            width: 24px;
		        }
		    </style>
	</head>
	<body>
	    <div class="box">
	        <label for="">
	            <img src="images/close.png" alt="" id="eye">
	        </label>
	        <input type="password" name="" id="pwd">
	    </div>
	    <script>
	        // 1. 获取元素
	        var eye = document.getElementById('eye');
	        var pwd = document.getElementById('pwd');
	        // 2. 注册事件 处理程序
	        var flag = 0;
	        eye.onclick = function() {
	            // 点击一次之后, flag 一定要变化
	            if (flag == 0) {
	                pwd.type = 'text';
	                eye.src = 'images/open.png';
	                flag = 1; // 赋值操作
	            } else {
	                pwd.type = 'password';
	                eye.src = 'images/close.png';
	                flag = 0;
	            }
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述

(4)样式属性操作

我们可以通过JS修改元素的大小、颜色、位置等样式

① element.style 行内样式操作

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
			    div {
			        width: 200px;
			        height: 200px;
			        background-color: pink;
			    }
			</style>
	</head>
	<body>
	    <div></div>
	    <script>
	        // 1. 获取元素
	        var div = document.querySelector('div');
	        // 2. 注册事件 处理程序
	        div.onclick = function() {
	            // div.style里面的属性 采取驼峰命名法 
	            this.style.backgroundColor = 'purple';
	            this.style.width = '250px';
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述

1. JS 里面的样式采取驼峰命名法

2. JS 修改 style 样式操作,产生的是行内样式,CSS权重比较高

案例:淘宝点击关闭二维码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
			    .box {
			        position: relative;
			        width: 74px;
			        height: 88px;
			        border: 1px solid #ccc;
			        margin: 100px auto;
			        font-size: 12px;
			        text-align: center;
			        color: #f40;
			        /* display: block; */
			    }
			        
			    .box img {
			        width: 60px;
			        margin-top: 5px;
			    }
			        
			    .close-btn {
			        position: absolute;
			        top: -1px;
			        left: -16px;
			        width: 14px;
			        height: 14px;
			        border: 1px solid #ccc;
			        line-height: 14px;
			        font-family: Arial, Helvetica, sans-serif;
			        cursor: pointer;
			    }
			</style>
	</head>
	<body>
	    <div class="box">
	        淘宝二维码
	        <img src="images/tao.png" alt="">
	        <i class="close-btn">×</i>
	    </div>
	    <script>
	        // 1. 获取元素 
	        var btn = document.querySelector('.close-btn');
	        var box = document.querySelector('.box');
	        // 2.注册事件 程序处理
	        btn.onclick = function() {
	            box.style.display = 'none';
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
点击后二维码关闭

案例:循环精灵图背景

利用for循环设置一组元素的精灵图背景

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style-type: none;
        }
        
        .box {
            width: 250px;
            margin: 100px auto;
        }
        
        .box li {
            float: left;
            width: 24px;
            height: 24px;
            background-color: pink;
            margin: 15px;
            background: url(images/sprite.png) no-repeat;
        }
    </style>
</head>

<body>
    <div class="box">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <script>
        // 1. 获取元素 所有的小li 
        var lis = document.querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            // 让索引号 乘以 44 就是每个li 的背景y坐标  index就是我们的y坐标
            var index = i * 44;
            lis[i].style.backgroundPosition = '0 -' + index + 'px';
        }
    </script>
</body>

</html>

在这里插入图片描述
案例:显示隐藏文本框内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
			    input {
			        color: #999;
			    }
			</style>
	</head>
	<body>
	    <input type="text" value="手机">
	    <script>
	        // 1.获取元素
	        var text = document.querySelector('input');
	        // 2.注册事件 获得焦点事件 onfocus 
	        text.onfocus = function() {
	                // console.log('得到了焦点');
	                if (this.value === '手机') {
	                    this.value = '';
	                }
	                // 获得焦点需要把文本框里面的文字颜色变黑
	                this.style.color = '#333';
	            }
	            // 3. 注册事件 失去焦点事件 onblur
	        text.onblur = function() {
	            // console.log('失去了焦点');
	            if (this.value === '') {
	                this.value = '手机';
	            }
	            // 失去焦点需要把文本框里面的文字颜色变浅色
	            this.style.color = '#999';
	        }
	    </script>
	
	</body>
</html>

在这里插入图片描述
在这里插入图片描述

② element.className 类名样式操作

例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
			    div {
			        width: 100px;
			        height: 100px;
			        background-color: pink;
			    }
			        
			    .change {
			        background-color: purple;
			        color: #fff;
			        font-size: 25px;
			        margin-top: 100px;
			    }
			</style>
	</head>
	<body>
	    <div class="first">文本</div>
	    <script>
	        // 1. 使用 element.style 获得修改元素样式  如果样式比较少 或者 功能简单的情况下使用
	        var test = document.querySelector('div');
	        test.onclick = function() {
	            // this.style.backgroundColor = 'purple';
	            // this.style.color = '#fff';
	            // this.style.fontSize = '25px';
	            // this.style.marginTop = '100px';
	            // 让我们当前元素的类名改为了 change
	
	            // 2. 我们可以通过 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况
	            // 3. 如果想要保留原先的类名,我们可以这么做 多类名选择器
	            // this.className = 'change';
	            this.className = 'first change';
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
案例:密码框格式提示错误信息

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no,
		initial-sale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
		<title></title>
			<style>
				div {
					width: 600px;
					margin: 100px auto;
				}
				
				.message {
					display: inline-block;
					font-size: 12px;
					color: #999;
					background: url(images/mess.png) no-repeat left center;
					padding-left: 20px;
				}
				
				.wrong {
					color: red;
					background-image: url(images/wrong.png);
				}
				
				.right {
					color: green;
					background-image: url(images/right.png);
				}
			</style>
	</head>
	<body>
	    <div class="register">
	        <input type="password" class="ipt">
	        <p class="message">请输入6~16位密码</p>
	    </div>
	    <script>
	        // 首先判断的事件是表单失去焦点 onblur
	        // 如果输入正确则提示正确的信息颜色为绿色小图标变化
	        // 如果输入不是6到16位,则提示错误信息颜色为红色 小图标变化
	        // 因为里面变化样式较多,我们采取className修改样式
	        // 1.获取元素
	        var ipt = document.querySelector('.ipt');
	        var message = document.querySelector('.message');
	        //2. 注册事件 失去焦点
	        ipt.onblur = function() {
	            // 根据表单里面值的长度 ipt.value.length
	            if (this.value.length < 6 || this.value.length > 16) {
	                // console.log('错误');
	                message.className = 'message wrong';
	                message.innerHTML = '您输入的位数不对要求6~16位';
	            } else {
	                message.className = 'message right';
	                message.innerHTML = '您输入的正确';
	            }
	        }
	    </script>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值