JavaWeb系列四: DOM下

基本介绍

在HTML DOM(文档对象模型)中,每个部分都是节点.

1.文档 本身是文档节点;

2.所有 HTML元素 是元素节点;

3.所有 HTML属性 是属性节点;

4.HTML元素内的 文本 是文本节点;

5.注释是 注释节点;

节点属性和方法一览

HTML DOM Element 对象文档地址: https://www.w3school.com.cn/jsref/dom_obj_all.asp

HTML DOM Document 对象文档地址: https://www.w3school.com.cn/jsref/dom_obj_document.asp

节点常用方法

1.通过具体的元素节点调用 getElementsByTagName() 方法, 获取当前节点的指定标签名.

2.appendChild(childNode) 方法, 可以添加一个子节点, childNode是要添加的孩子节点.

节点常用属性

1.childNodes属性: 获取当前节点的所有子节点.

2.firstChild属性:获取当前节点的第一个子节点

3.lastChild属性: 获取当前节点的最后一个子节点.

4.parentNode属性: 获取当前节点的父节点.

5.nextSibling属性: 获取当前节点的下一个(后一个)节点.

6.previousSibling属性: 获取当前节点的上一个(前一个)节点.

7.className: 获取或设置标签的class属性值

8.innerHTML属性: 获取或设置起始标签和结束标签中的内容

9.innerText属性: 获取或设置起始标签和结束标签中的文本

应用实例

1.需求: 如图, 点击右侧的按钮, 可以得到对应的节点.

在这里插入图片描述

2.应用实例 创建dom/html-dom.html

通过id获取节点

1.创建dom/html-dom.html, 完成功能.


在这里插入图片描述

获取所有option节点

html-dom02.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //查找所有option节点
            var btn02 = document.getElementById("btn02");
            btn02.onclick = function () {
                //id --> getElementById()
                //name --> getElementsByName()
                //元素标签 --> getElementsByTagName()
                var options = document.getElementsByTagName("option");
                //HTMLCollection
                for (var i = 0; i < options.length; i++) {
                    alert("options[" + (i + 1) + "] = " + options[i].innerText);
                }
            };
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>你当前的女友是谁:</p>
        <select id="sel01">
            <option>--女友--</option>
            <option>霞燕</option>
            <option id="ct" value="春桃姑娘">春桃</option>
            <option>秋枫</option>
            <option>冬梅</option>
        </select>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn02">查找所有option节点</button>
    </div>
</div>
</body>
</html>

通过name获取节点

html-dom03.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>演示HTML DOM 相关方法</title>
  <link rel="stylesheet" type="text/css" href="style/css.css"/>
  <script type="text/javascript">
    //动态注册
    window.onload = function () {
      //查找name=sport节点
      var btn03 = document.getElementById("btn03");
      btn03.onclick = function () {
        var sports = document.getElementsByName("sport");
        // alert(sports);//NodeList
        for (var i = 0; i < sports.length; i++) {
          if (sports[i].checked) {
            alert("运动是 = " + sports[i].value);
          }
        }
      };
    }
  </script>
</head>
<body>
<div>
  <div>
    <p>你喜欢的运动项目:</p>
    <input type="checkbox" name="sport" value="soccer" checked="checked"/>足球
    <input type="checkbox" name="sport" value="basketball" checked="checked"/>蓝球
    <input type="checkbox" name="sport" value="pingPang" checked="checked"/>乒乓球
  </div>
</div>
<div id="btnList">
  <div>
    <button id="btn03">查找name=sport节点</button>
  </div>
</div>
</body>
</html>

查找id=language下所有li节点

html-dom04.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //查找id=language下所有li节点
            var btn04 = document.getElementById("btn04");
            btn04.onclick = function () {
                var lis = document.getElementById("language").getElementsByTagName("li");
                // alert("lis=" + lis);//HTMLCollection
                for (var i = 0; i < lis.length; i++) {
                    alert("lis[" + (i + 1) + "] = " + lis[i].innerText);
                }
            };
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>
            你的编程语言:
        </p>
        <ul id="language">
            <li id="java">Java</li>
            <li>Python</li>
            <li>Go语言</li>
        </ul>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn04">查找id=language下所有li节点</button>
    </div>
</div>
</body>
</html>

获取指定dom对象的所有子节点

html-dom05.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //返回id=sel01的所有子节点
            var btn05 = document.getElementById("btn05");
            btn05.onclick = function () {
                //var options = document.getElementById("sel01").getElementsByTagName("option");
                //alert(options.length);//5 不算换行符
                //1.如果使用document.getElementById("sel01").childNodes; 获取的是[object Text],[object HTMLOptionElement]
                //2.如果不希望得到 text对象, 需要将所有的内容放在一行
                var childNodes = document.getElementById("sel01").childNodes;
                //alert(childNodes);//NodeList
                //alert(childNodes.length);//11, 加上文本, 在这里换行符属于文本[object Text]
                for (var i = 0; i < childNodes.length; i++) {
                    //alert(childNodes[i]);//HTMLOptionElement
                    if (childNodes[i].innerText != undefined && childNodes[i].selected) {
                        alert("女友有 = " + childNodes[i].innerText);
                    }
                }
                alert("===============还有一个方法===============");
                //1.sel01 是 HTMLSelectElement => 本身具有集合的特点
                var sel01 = document.getElementById("sel01");
                alert(sel01);//HTMLSelectElement
                alert(sel01[0]);//HTMLOptionElement
                for (var i = 0; i < sel01.length; i++) {
                    alert("sel01[" + (i + 1) + "] = " + sel01[i].innerText);
                }
            };
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>
            你当前的女友是谁:
        </p>
        <select id="sel01">
            <option>--女友--</option>
            <option>霞燕</option>
            <option id="ct" value="春桃姑娘">春桃</option>
            <option>秋枫</option>
            <option>冬梅</option>
        </select>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn05">返回id=sel01的所有子节点</button>
    </div>
</div>
</body>
</html>

获取第一个子节点

html-dom06.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //返回id=sel01 的第一个子节点
            var btn06 = document.getElementById("btn06");
            btn06.onclick = function () {
                var sel01 = document.getElementById("sel01");
                var childNodes = sel01.childNodes;
                alert(childNodes[0]);//object Text
                var firstChild = sel01.firstChild;
                alert(firstChild);//object Text]
                alert(sel01[0]);//直接得到第一个option节点 object HTMLOptionElement
            }
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>
            你当前的女友是谁:
        </p>
        <select id="sel01">
            <option>--女友--</option>
            <option>霞燕</option>
            <option id="ct" value="春桃姑娘">春桃</option>
            <option>秋枫</option>
            <option>冬梅</option>
        </select>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn06">返回id=sel01的第一个子节点</button>
    </div>
</div>
</body>
</html>

获取父节点

html-dom07.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //返回id=java的父节点
            var btn07 = document.getElementById("btn07");
            btn07.onclick = function () {
                var java = document.getElementById("java");
                alert(java);//HTMLLIElement
                var parentNode = java.parentNode;
                alert(parentNode);//HTMLUListElement
                alert(parentNode.innerText);
                alert(parentNode.innerHTML);//<li id="java">Java</li>
                var childNodes = parentNode.childNodes;
                alert(childNodes.length);//7
                for (var i = 0; i < childNodes.length; i++) {
                    if (childNodes[i].innerText != undefined) {//换行符[文本]也算一个节点
                        alert("childNodes[" + (i + 1) + "] = " + childNodes[i].innerText);
                    }
                }
                var parentElement = java.parentElement;
                alert(parentElement);//HTMLUListElement
            };
        }
    </script>
</head>
<body>
<div>
    <div>
        <p>
            你的编程语言:
        </p>
        <ul id="language">
            <li id="java">Java</li>
            <li>Python</li>
            <li>Go语言</li>
        </ul>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn07">返回id=java的父节点</button>
    </div>
</div>
</body>
</html>

获取前后兄弟节点

html-dom08.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            var btn08 = document.getElementById("btn08");
            btn08.onclick = function () {
                var ct = document.getElementById("ct");
                alert(ct.previousSibling);//Text[换行符]
                alert(ct.previousSibling.previousSibling);//HtmlOptionElement
                alert(ct.previousSibling.previousSibling.innerText);//霞燕
                alert(ct.nextSibling);//Text[换行符]
                alert(ct.nextSibling.nextSibling);//HTMLOptionElement
                alert(ct.nextSibling.nextSibling.innerText);//秋枫
            };
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>
            你当前的女友是谁:
        </p>
        <select id="sel01">
            <option>--女友--</option>
            <option>霞燕</option>
            <option id="ct" value="春桃姑娘">春桃</option>
            <option>秋枫</option>
            <option>冬梅</option>
        </select>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn08">返回id=ct的前后兄弟节点</button>
    </div>
</div>
</body>
</html>

设置文本域内容

html-dom09.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>演示HTML DOM 相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
    <script type="text/javascript">
        //动态注册
        window.onload = function () {
            //设置id=person的文本域
            var btn10 = document.getElementById("btn10");
            btn10.onclick = function () {
                var person = document.getElementById("person");
                person.innerText = "刀剑神域";//设置文本域
            }
        };
    </script>
</head>
<body>
<div>
    <div>
        <p>
            个人介绍:
        </p>
        <textarea name="person" id="person">个人介绍</textarea>
    </div>
</div>
<div id="btnList">
    <div>
        <button id="btn10">设置id=person的文本域</button>
    </div>
</div>
</body>
</html>

总代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML DOM相关方法</title>
    <link rel="stylesheet" type="text/css" href="style/css.css"/>
</head>
<script type="text/javascript">
    window.onload = function () {
        //查找id=java的节点
        var btn01 = document.getElementById("btn01");
        btn01.onclick = function () {
            var java = document.getElementById("java");
            alert("java节点的文本=" + java.innerText);
        }

        //查找所有option节点
        var btn02 = document.getElementById("btn02");
        btn02.onclick = function () {
            var options = document.getElementsByTagName("option");
            for (var i = 0; i < options.length; i++) {
                alert("options[" + i + "].innerText->" + options[i].innerText);
            }
        }

        //查找name=sports的节点
        var btn03 = document.getElementById("btn03");
        btn03.onclick = function () {
            var sports = document.getElementsByName("sports");
            for (var i = 0; i < sports.length; i++) {
                alert("sports[" + i + "].innerText->" + sports[i].value);
            }
        }

        //查找id=language下所有li节点
        var btn04 = document.getElementById("btn04");
        btn04.onclick = function () {
            var languages = document.getElementById("language");
            var lis = languages.getElementsByTagName("li");
            for (var i = 0; i < lis.length; i++) {
                alert("lis[" + i + "].innerText->" + lis[i].innerText);
            }
        }

        //返回id=girlFriend的所有子节点
        var btn05 = document.getElementById("btn05");
        btn05.onclick = function () {
            var girlFriend = document.getElementById("girlFriend");
            alert("=====================方法一===========================");
            var childNodes = girlFriend.childNodes;
            //在这里换行符属于文本[object Text]
            获取的是[object Text],[object HTMLOptionElement],[object Text],[object HTMLOptionElement],[object Text],[object HTMLOptionElement],[object Text]
            //如果不希望得到 换行符(即text对象), 需要将所有的内容放在一行
            alert("childNodes.length=" + childNodes.length);//7, 加上文本
            for(var i = 0; i < childNodes.length; i++) {
                if (childNodes[i].innerText != undefined && childNodes[i].selected) {
                    alert("childNodes[" + i + "].innerText->" + childNodes[i].innerText);
                }
            }
            alert("=====================方法二===========================");
            var options = girlFriend.getElementsByTagName("option");
            alert("options.length=" + options.length);//不算换行符
            for (var i = 0; i < options.length; i++) {
                if (options[i].selected) {
                    alert("options[" + i + "].innerText->" + options[i].innerText);
                }
            }
        }

        //返回id=girlFriend的第一个子节点
        var btn06 = document.getElementById("btn06");
        btn06.onclick = function () {
            var girlFriends = document.getElementById("girlFriend");
            alert("=========第一种方式=========")
            var childNodes = girlFriends.childNodes;
            alert(childNodes[1].innerText);//childNodes[0]是换行文本
            alert("=========第二种方式=========")
            alert(girlFriends[0].innerText);
            alert("=========第三种方式=========")
            alert(girlFriends.firstChild.nextSibling.innerText);//因为第一个节点是换行文本
        }

        //获取id=java的父节点
        var btn07 = document.getElementById("btn07");
        btn07.onclick = function () {
            var java = document.getElementById("java");
            var parentNode = java.parentNode;
            alert("parentNode.innerText=>\n" + parentNode.innerText);
            alert("parentNode.innerHTML=>" + parentNode.innerHTML);
        }

        //获取id=lq的前后兄弟节点
        var lq = document.getElementById("lq");
        btn08.onclick = function () {
            var nextSibling = lq.nextSibling;//换行符文本
            var previousSibling = lq.previousSibling;//换行符文本
            var nextSibling1 = lq.nextSibling.nextSibling;
            var previousSibling1 = lq.previousSibling.previousSibling;
            alert("nextSibling.nextSibling.innerText=>" + nextSibling.nextSibling.value);//innerText是开始标签和结束标签之间的文本, 没有值
            alert("previousSibling.previousSibling.innerText=>" + previousSibling.previousSibling.value);
        }

        //设置id=person的文本域
        var btn09 = document.getElementById("btn09");
        btn09.onclick = function () {
            var person = document.getElementById("person");
            person.innerText = "修改后的自我介绍";
        }
    }
</script>
<body>
<div id="total">
    <div class="inner">

        <p>你的编程语言:</p>
        <ul id="language">
            <li id="java">java</li>
            <li>python</li>
            <li>go语言</li>
        </ul>

        <p>你当前的女友:</p>
        <select id="girlFriend">
            <option value="小红">小红</option>
            <option value="小明">小明</option>
            <option value="小花">小花</option>
        </select>

        <p>你喜欢的运动项目:</p>
        <input type="checkbox" name="sports" value="足球"/>足球
        <input type="checkbox" id="lq" name="sports" value="篮球"/>篮球
        <input type="checkbox" name="sports" value="排球"/>排球

        <p>个人介绍:</p>
        <textarea id="person">个人介绍</textarea>
    </div>

</div>
<div id="btnList">
    <div>
        <button id="btn01">查找id=java节点</button>
    </div>
    <div>
        <button id="btn02">查找所有的option节点</button>
    </div>
    <div>
        <button id="btn03">查找name=sport节点</button>
    </div>
    <div>
        <button id="btn04">查找id=language下所有li节点</button>
    </div>
    <div>
        <button id="btn05">返回id=girlFriend的所有子节点</button>
    </div>
    <div>
        <button id="btn06">获取id=girlFriend的第一个子节点</button>
    </div>
    <div>
        <button id="btn07">获取id=java的父节点</button>
    </div>
    <div>
        <button id="btn08">获取id=lq的前后兄弟节点</button>
    </div>
    <div>
        <button id="btn09">设置id=person的文本域</button>
    </div>
</div>
</body>
</html>

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

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

作业布置 乌龟吃鸡游戏

1.需求: 编写tortoiseGame.html, 完成乌龟吃鸡的js小游戏.

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

2.代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tortoise-hen碰撞游戏</title>
    <script type="text/javascript">
        //公鸡的坐标
        var hen_xPos = 200;
        var hen_yPos = 200;
        //乌龟图片的宽度和高度
        var tortoise_width = 94;
        var tortoise_height = 67;
        //公鸡图片的宽度和高度
        var hen_width = 76;
        var hen_height = 73;

        function move(obj) {//object HTMLButtonElement
            var tortoise = document.getElementById("tortoise");
            var tortoise_left = tortoise.style.left;//100px 值传递
            var tortoise_top = tortoise.style.top;//130px  值传递
            var tortoise_xPos = parseInt(tortoise_left.substring(0, tortoise_left.indexOf("p")));
            var tortoise_yPos = parseInt(tortoise_top.substring(0, tortoise_top.indexOf("p")));

            //通过button的 dom对象,获取innerText
            switch (obj.innerText) {
                case "向上走":
                    tortoise_yPos -= 10;
                    tortoise.style.top =tortoise_yPos + "px";
                    break;
                case "向下走":
                    tortoise_yPos += 10;
                    tortoise.style.top = tortoise_yPos + 'px';
                    break;
                case "向左走":
                    tortoise_xPos -= 10;
                    tortoise.style.left = tortoise_xPos + "px";
                    break;
                case "向右走":
                    tortoise_xPos += 10;
                    tortoise.style.left = tortoise_xPos + "px";
                    break;
            }

            //走完之后再判断
            //4.1 得到乌龟左和公鸡左的距离,纵向距离y
            // (1)如果乌龟在公鸡上面, 如果纵向距离y < 乌龟图片的高度时, 说明它们可能在纵向发生重叠, 使用 yy 来记录
            // (2) 吐过乌龟在公鸡下面,如果纵向距离y < 公鸡图片的高度时, 说明它们可能在纵向发生重叠, 使用 yy 来记录
            // 4.2 得到乌龟和公鸡左上角的距离, 横向距离x
            // (1)如果乌龟在公鸡左面, 如果横向距离x < 乌龟图片的宽度时, 说明它们可能在横向发生重叠, 使用 xx 来记录
            // (2)如果乌龟在公鸡右面, 如果横向距离x < 公鸡图片的宽度时, 说明它们可能在横向发生重叠, 使用 xx 来记录
            var y = Math.abs(tortoise_yPos - hen_yPos);
            var x = Math.abs(tortoise_xPos - hen_xPos);
            var yy = 0;//
            var xx = 0;//默认横向没有重叠

            if (tortoise_yPos < hen_yPos) {//乌龟在上
                if (y < tortoise_height) {
                    yy  = 1;
                }
            } else {//乌龟在下
                if (y < hen_height) {
                    yy = 1;
                }
            }
            if (tortoise_xPos < hen_xPos) {//乌龟在左
                if (x < tortoise_width) {
                    xx = 1;
                }
            } else {//乌龟在右
                if (x < hen_width) {
                    xx = 1;
                }
            }

            if (xx && yy) {//js中 0默认是false
                alert("发生碰撞");
                tortoise.style.left = 100 + "px";
                tortoise.style.top = 130 + "px";
            }
        }
    </script>
</head>
<body>
<table>
    <tr>
        <td></td>
        <!--
            1.this表示的是你点击的这个button, 而且已经是一个dom对象
            3.可以通过dom对象操作属性和方法
        -->
        <td>
            <button onclick="move(this)">向上走</button><!--静态注册传参 只能用单引号-->
        </td>
        <td></td>
    </tr>
    <tr>
        <td>
            <button onclick="move(this)">向左走</button>
        </td>
        <td></td>
        <td>
            <button onclick="move(this)">向右走</button>
        </td>
    </tr>
    <tr>
        <td></td>
        <td>
            <button onclick="move(this)">向下走</button>
        </td>
        <td></td>
    </tr>
</table>
<img src="./img/1.bmp" id="tortoise" style="position: absolute; left: 100px; top: 130px;" border="1">
<img src="./img/2.bmp" style="position: absolute; left: 200px; top: 200px;" border="1">
</body>
</html>
  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~ 小团子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值