为了账号安全,请及时绑定邮箱和手机立即绑定

动态表格教程:轻松入门与实践

标签:
杂七杂八
概述

本文详细介绍了动态表格教程,包括动态表格的概念、特点、应用场景、基础操作及创建方法。通过示例代码和实践案例,帮助读者全面了解如何开发和优化动态表格。文章还提供了调试与优化建议,以及相关学习资源,助力读者进一步拓展知识。

动态表格简介
什么是动态表格

动态表格是一种可以实时响应用户操作、自动更新内容的表格。这种表格用于展示和管理数据,通过添加、删除或修改表格中的数据,可以实现表格的动态显示。动态表格的实现通常依赖于前端技术,如HTML、CSS、JavaScript,以及服务器端技术,如Node.js、PHP等。

动态表格的特点和优势
  1. 实时更新:动态表格能够根据用户操作或后台数据变化,实时更新表格内容。
  2. 交互性:用户可以轻松地对表格进行增删改查操作,增强了用户交互体验。
  3. 灵活性:动态表格可以根据应用需求自定义样式、布局和功能,具有较高的灵活性。
  4. 数据一致性:通过实时数据同步,确保表格中的数据与数据库等后端数据源保持一致。
动态表格的应用场景
  1. 数据统计分析:例如,销售数据统计、财务报表分析等。
  2. 用户管理:例如,用户信息管理、权限管理等。
  3. 实时监控系统:例如,服务器监控、网站流量统计等。
  4. 在线课程管理:例如,课程列表管理、学员信息展示等。
创建动态表格
准备工具和环境

为了创建动态表格,开发者需要准备好以下工具和环境:

  1. 代码编辑器:例如Visual Studio Code、Sublime Text等。
  2. Web服务器:如Apache或Nginx。
  3. 后端语言:如Node.js、PHP或Python等。
  4. 数据库:如MySQL、MongoDB等。
  5. 前端技术栈:HTML、CSS、JavaScript等。

具体配置步骤如下:

  • 代码编辑器:安装并配置Visual Studio Code或其他代码编辑器,以便编写和调试代码。
  • Web服务器:安装Apache或Nginx,并配置服务器环境,确保Web应用可以正常运行。
  • 后端语言:根据项目需求选择合适的后端语言,如Node.js、PHP或Python,并安装相应的开发环境。
  • 数据库:选择合适的数据库系统,如MySQL、MongoDB,并进行数据库的安装和配置。
  • 前端技术栈:掌握HTML、CSS和JavaScript的基础知识,并熟悉常用的前端框架或库,如React、Vue等。
创建基础表格结构

创建动态表格的第一步是构建一个基础的HTML表格结构。下面是一个简单的HTML表格示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>
添加动态元素

接下来,我们需要为表格添加动态元素,使表格能够响应用户的操作。这通常通过JavaScript来实现。下面的示例展示了如何添加一个JavaScript函数来删除表格中的行:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelectorAll('.delete').forEach(function(button) {
                button.addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });
            });
        });
    </script>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

增加数据示例

为了增加数据,我们可以在表格中添加一个表单,用户通过表单提交数据后,数据会被添加到表格中。下面是一个简单的例子:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('#add').addEventListener('click', function() {
                const name = document.querySelector('#name').value;
                const age = document.querySelector('#age').value;
                const newRow = document.createElement('tr');
                newRow.innerHTML = `
                    <td>${name}</td>
                    <td>${age}</td>
                    <td><button class="delete">删除</button></td>
                `;
                document.querySelector('tbody').appendChild(newRow);
                document.querySelector('#name').value = '';
                document.querySelector('#age').value = '';
            });

            document.querySelectorAll('.delete').forEach(function(button) {
                button.addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="age">年龄:</label>
        <input type="number" id="age" name="age">
        <button type="button" id="add">添加</button>
    </form>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>
动态表格的基础操作
数据的增删改查

动态表格的一个重要特性是能够对表格数据进行增删改查操作。下面分别介绍如何通过JavaScript实现这些操作。

增加数据

为了增加数据,我们可以在表格中添加一个表单,用户通过表单提交数据后,数据会被添加到表格中。下面是一个简单的例子:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('#add').addEventListener('click', function() {
                const name = document.querySelector('#name').value;
                const age = document.querySelector('#age').value;
                const newRow = document.createElement('tr');
                newRow.innerHTML = `
                    <td>${name}</td>
                    <td>${age}</td>
                    <td><button class="delete">删除</button></td>
                `;
                document.querySelector('tbody').appendChild(newRow);
                document.querySelector('#name').value = '';
                document.querySelector('#age').value = '';
            });

            document.querySelectorAll('.delete').forEach(function(button) {
                button.addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="age">年龄:</label>
        <input type="number" id="age" name="age">
        <button type="button" id="add">添加</button>
    </form>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

删除数据

在上面的例子中,我们已经实现了删除数据的功能。每个行的最后一个单元格都包含一个删除按钮,点击该按钮即可删除对应的行。

修改数据

要实现修改数据的功能,可以在表格中添加一个编辑按钮,允许用户编辑数据。下面是一个简单的例子:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('#add').addEventListener('click', function() {
                const name = document.querySelector('#name').value;
                const age = document.querySelector('#age').value;
                const newRow = document.createElement('tr');
                newRow.innerHTML = `
                    <td>${name}</td>
                    <td>${age}</td>
                    <td><button class="edit">编辑</button><button class="delete">删除</button></td>
                `;
                newRow.querySelector('.edit').addEventListener('click', function() {
                    const cells = this.parentElement.parentElement.cells;
                    cells[0].innerHTML = `<input type="text" value="${cells[0].innerText}">`;
                    cells[1].innerHTML = `<input type="number" value="${cells[1].innerText}">`;
                    const editButton = cells[2].querySelector('.edit');
                    cells[2].querySelector('.save').addEventListener('click', function() {
                        const nameInput = cells[0].querySelector('input');
                        const ageInput = cells[1].querySelector('input');
                        cells[0].innerHTML = nameInput.value;
                        cells[1].innerHTML = ageInput.value;
                        cells[2].innerHTML = `<button class="edit">编辑</button><button class="delete">删除</button>`;
                    });
                });
                document.querySelector('tbody').appendChild(newRow);
                document.querySelector('#name').value = '';
                document.querySelector('#age').value = '';
            });

            document.querySelectorAll('.delete').forEach(function(button) {
                button.addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="age">年龄:</label>
        <input type="number" id="age" name="age">
        <button type="button" id="add">添加</button>
    </form>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="edit">编辑</button><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="edit">编辑</button><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

查询数据

查询数据通常需要后端支持。例如,可以通过一个AJAX请求从服务器获取数据,并在表格中显示。下面是一个简单的例子:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('#fetch').addEventListener('click', function() {
                fetch('/api/data')
                    .then(response => response.json())
                    .then(data => {
                        const tbody = document.querySelector('tbody');
                        tbody.innerHTML = '';
                        data.forEach(item => {
                            const newRow = document.createElement('tr');
                            newRow.innerHTML = `
                                <td>${item.name}</td>
                                <td>${item.age}</td>
                                <td><button class="delete">删除</button></td>
                            `;
                            tbody.appendChild(newRow);
                        });
                    });
            });
        });
    </script>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <!-- 数据将在这里显示 -->
        </tbody>
    </table>
    <button id="fetch">获取数据</button>
</body>
</html>

注意:/api/data 是一个假设的API接口,实际应用中需要替换为真实的接口地址。

表格内容的动态更新

动态更新表格内容通常需要配合后端实现。例如,可以使用WebSocket或轮询的方式,让表格实时更新。下面是一个使用WebSocket的简单示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const socket = new WebSocket('ws://localhost:8080');
            socket.addEventListener('message', function(event) {
                const data = JSON.parse(event.data);
                const tbody = document.querySelector('tbody');
                tbody.innerHTML = '';
                data.forEach(item => {
                    const newRow = document.createElement('tr');
                    newRow.innerHTML = `
                        <td>${item.name}</td>
                        <td>${item.age}</td>
                        <td><button class="delete">删除</button></td>
                    `;
                    tbody.appendChild(newRow);
                });
            });
        });
    </script>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <!-- 数据将在这里显示 -->
        </tbody>
    </table>
</body>
</html>
基础样式设置与调整

为了使动态表格更加美观和易用,可以使用CSS来设置表格的基础样式。下面是一个简单的CSS样式示例:

table {
    width: 100%;
    border-collapse: collapse;
}

th, td {
    border: 1px solid #ddd;
    padding: 8px;
    text-align: left;
}

th {
    background-color: #f2f2f2;
    font-weight: bold;
}

button {
    background-color: #4CAF50;
    color: white;
    padding: 4px 8px;
    border: none;
    cursor: pointer;
}

button:hover {
    background-color: #45a049;
}

button:disabled {
    background-color: #ddd;
}

将上述CSS代码添加到HTML文件中,可以显著改善表格的外观。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>动态表格示例</title>
    <style>
        table {
            width: 100%;
            border-collapse: collapse;
        }

        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
            font-weight: bold;
        }

        button {
            background-color: #4CAF50;
            color: white;
            padding: 4px 8px;
            border: none;
            cursor: pointer;
        }

        button:hover {
            background-color: #45a049;
        }

        button:disabled {
            background-color: #ddd;
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('#add').addEventListener('click', function() {
                const name = document.querySelector('#name').value;
                const age = document.querySelector('#age').value;
                const newRow = document.createElement('tr');
                newRow.innerHTML = `
                    <td>${name}</td>
                    <td>${age}</td>
                    <td><button class="delete">删除</button></td>
                `;
                document.querySelector('tbody').appendChild(newRow);
                document.querySelector('#name').value = '';
                document.querySelector('#age').value = '';
            });

            document.querySelectorAll('.delete').forEach(function(button) {
                button.addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="age">年龄:</label>
        <input type="number" id="age" name="age">
        <button type="button" id="add">添加</button>
    </form>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td><button class="delete">删除</button></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
                <td><button class="delete">删除</button></td>
            </tr>
        </tbody>
    </table>
</body>
</html>
实践案例:简单的动态表格应用
设计一个小型动态表格项目

为了更好地理解动态表格的实现过程,我们设计一个名为“用户管理”的小型项目。这个项目的目标是实现一个简单的用户信息管理功能,包括添加、删除、编辑用户信息。

实现项目功能

数据模型

首先定义一个简单的数据模型,用于存储用户信息:

class User {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
}

表格初始化

接下来定义一个函数来初始化表格数据:

function initializeTable(users) {
    const tbody = document.querySelector('tbody');
    tbody.innerHTML = '';
    users.forEach(user => {
        const newRow = document.createElement('tr');
        newRow.innerHTML = `
            <td>${user.name}</td>
            <td>${user.age}</td>
            <td><button class="edit">编辑</button><button class="delete">删除</button></td>
        `;
        newRow.querySelector('.edit').addEventListener('click', function() {
            const cells = this.parentElement.parentElement.cells;
            cells[0].innerHTML = `<input type="text" value="${cells[0].innerText}">`;
            cells[1].innerHTML = `<input type="number" value="${cells[1].innerText}">`;
            const editButton = cells[2].querySelector('.edit');
            cells[2].querySelector('.save').addEventListener('click', function() {
                const nameInput = cells[0].querySelector('input');
                const ageInput = cells[1].querySelector('input');
                cells[0].innerHTML = nameInput.value;
                cells[1].innerHTML = ageInput.value;
                cells[2].innerHTML = `<button class="edit">编辑</button><button class="delete">删除</button>`;
            });
        });

        newRow.querySelector('.delete').addEventListener('click', function() {
            const row = this.parentElement.parentElement;
            row.remove();
        });

        tbody.appendChild(newRow);
    });
}

表单操作

接下来实现表单操作,包括添加用户信息:

document.addEventListener('DOMContentLoaded', function() {
    const users = [
        new User('张三', 25),
        new User('李四', 30)
    ];
    initializeTable(users);

    document.querySelector('#add').addEventListener('click', function() {
        const name = document.querySelector('#name').value;
        const age = document.querySelector('#age').value;
        const newUser = new User(name, age);
        users.push(newUser);
        initializeTable(users);
        document.querySelector('#name').value = '';
        document.querySelector('#age').value = '';
    });
});

删除用户信息

删除用户信息的功能已经在initializeTable函数中实现了,当用户点击删除按钮时,对应的行会被移除。

编辑用户信息

编辑用户信息的功能也在initializeTable函数中实现了。用户点击编辑按钮后,当前行的数据会被替换为输入框,用户可以在输入框中修改数据,点击保存按钮后,输入框会被替换回原始的表格内容。

完整的HTML文件

将上述代码整合到一个完整的HTML文件中,如下所示:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>用户管理表格</title>
    <style>
        table {
            width: 100%;
            border-collapse: collapse;
        }

        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
            font-weight: bold;
        }

        button {
            background-color: #4CAF50;
            color: white;
            padding: 4px 8px;
            border: none;
            cursor: pointer;
        }

        button:hover {
            background-color: #45a049;
        }

        button:disabled {
            background-color: #ddd;
        }
    </style>
    <script>
        class User {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
        }

        function initializeTable(users) {
            const tbody = document.querySelector('tbody');
            tbody.innerHTML = '';
            users.forEach(user => {
                const newRow = document.createElement('tr');
                newRow.innerHTML = `
                    <td>${user.name}</td>
                    <td>${user.age}</td>
                    <td><button class="edit">编辑</button><button class="delete">删除</button></td>
                `;
                newRow.querySelector('.edit').addEventListener('click', function() {
                    const cells = this.parentElement.parentElement.cells;
                    cells[0].innerHTML = `<input type="text" value="${cells[0].innerText}">`;
                    cells[1].innerHTML = `<input type="number" value="${cells[1].innerText}">`;
                    const editButton = cells[2].querySelector('.edit');
                    cells[2].querySelector('.save').addEventListener('click', function() {
                        const nameInput = cells[0].querySelector('input');
                        const ageInput = cells[1].querySelector('input');
                        cells[0].innerHTML = nameInput.value;
                        cells[1].innerHTML = ageInput.value;
                        cells[2].innerHTML = `<button class="edit">编辑</button><button class="delete">删除</button>`;
                    });
                });

                newRow.querySelector('.delete').addEventListener('click', function() {
                    const row = this.parentElement.parentElement;
                    row.remove();
                });

                tbody.appendChild(newRow);
            });
        }

        document.addEventListener('DOMContentLoaded', function() {
            const users = [
                new User('张三', 25),
                new User('李四', 30)
            ];
            initializeTable(users);

            document.querySelector('#add').addEventListener('click', function() {
                const name = document.querySelector('#name').value;
                const age = document.querySelector('#age').value;
                const newUser = new User(name, age);
                users.push(newUser);
                initializeTable(users);
                document.querySelector('#name').value = '';
                document.querySelector('#age').value = '';
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="age">年龄:</label>
        <input type="number" id="age" name="age">
        <button type="button" id="add">添加</button>
    </form>
    <table border="1">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <!-- 用户信息将在这里显示 -->
        </tbody>
    </table>
</body>
</html>
调试与优化

调试和优化是开发过程中非常重要的步骤。以下是一些调试和优化的建议:

调试

  1. 使用浏览器的开发者工具:通过浏览器的开发者工具可以查看网络请求、DOM元素等,有助于快速定位问题。
  2. 添加console.log:在关键代码处添加console.log语句,输出调试信息。
  3. 断点调试:在代码中设置断点,逐行执行代码,观察变量的变化。

优化

  1. 提高性能:尽量减少DOM操作的频率,使用批量操作DOM的方法,如innerHTML。
  2. 减少页面加载时间:优化HTML、CSS和JavaScript的代码,压缩资源文件,使用CDN等。
  3. 提高可访问性:确保页面对所有用户都是可访问的,包括使用屏幕阅读器的用户。
常见问题与解决方案
常见错误及解决方法
  1. 表格数据不显示:检查HTML代码是否正确,确保表格结构正确且数据源没有问题。
  2. 数据更新不及时:检查AJAX请求是否成功,确保后端接口返回的数据格式正确。
  3. 页面加载缓慢:检查CSS和JavaScript文件是否压缩,优化DOM操作,减少不必要的请求。
性能优化技巧
  1. 懒加载:对于较大的表格,使用懒加载的方式,只加载当前可见的数据。
  2. 使用虚拟DOM:使用React或Vue等框架,利用虚拟DOM提高性能。
  3. 减少DOM操作:尽量减少DOM操作,使用innerHTML或innerHTML等批量操作DOM的方法。
跨浏览器兼容性处理
  1. 使用标准的HTML和CSS:遵循W3C标准,使用标准的标签和属性。
  2. 使用Polyfill:对于不支持某些特性的浏览器,使用Polyfill库进行兼容。
  3. 测试不同浏览器:在不同的浏览器上进行测试,确保兼容性。
总结与进阶资源
动态表格的未来发展趋势

动态表格技术将不断演进,未来的趋势可能包括:

  1. 更好的交互性:提供更加丰富的交互体验,如拖拽排序、多选操作等。
  2. 更好的兼容性:支持更多浏览器和设备,确保跨平台兼容。
  3. 更高级的功能:实现更复杂的动态效果,如实时数据同步、动态表单验证等。
推荐学习资源
  1. 慕课网:提供丰富的编程课程,涵盖了前端、后端、数据库等多方面内容。
  2. MDN Web Docs:Mozilla开发者网络提供的文档,详细介绍了HTML、CSS和JavaScript等技术。
  3. Stack Overflow:一个问答平台,可以找到许多关于动态表格的问题和解决方案。
  4. GitHub:开源社区,可以找到许多动态表格相关的开源项目,学习借鉴。
进一步拓展的知识点
  1. 前端框架:学习React、Vue等前端框架,提高动态表格的开发效率。
  2. 后端技术:掌握Node.js、PHP或Python等后端技术,实现更复杂的动态表格功能。
  3. Web性能优化:学习如何优化网页性能,提高用户体验。
  4. 数据可视化:学习如何使用图表库(如ECharts、D3.js)将表格数据可视化,提供更直观的数据展示。

通过上述内容,读者可以全面了解动态表格的概念、创建方法、基础操作以及实践案例。希望这些知识和技巧能够帮助读者更好地掌握动态表格的开发。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消