自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 JavaScript 文档元素获取

Document Object Module ,简称 DOM ,中文名文档对象模型。在网页上,组成页面(又叫文档)的一个个对象被组织在树形结构中,用这种结构表示它们之间的层次关系,表示文档中对象的标准模型就称为 DOM。DOM 的作用是给 HTML 文档提供一个标准的树状模型,这样开发人员就能够通过 DOM 提供的接口去操作 HTML 里面的元素。

2024-08-11 23:51:04 1104

原创 JavaScript ——数学及日期函数

console.lo is not a function显然是一个系统内置的错误类型,如果用户觉得这样的错误类型不够具体,可以自定义错误类型:exception可以是字符串、数字、逻辑值或者对象,这样的错误也会被catch语句块捕获。//求开方的值try {if(a < 0)throw new Error("错误!负数不能开平方");throw new Error("错误!不支持大数开平方");console.log("发生错误,错误信息:"+err.message);

2024-07-22 15:03:52 588

原创 JavaScript 的JSON数据格式

JSON对象(通常叫JSON)是一种文本数据的交换格式,用于存储和传输数据。示例如下:这就是一个简单的json数据以键/值对的形式存在;数据之间用逗号间隔;大括号表示保存对象;方括号表示保存数组。

2024-07-17 01:02:06 937

原创 JavaScript 正则表达式

正则表达式:能够定义一类具有相同特征的字符串的式子。在JavaScript更简单的方法是直接用//这里的和上面的含义一模一样。

2024-07-15 02:12:26 613

原创 JavaScript——字符串

组成的序列)插入了无关的字符串,他想请你帮忙,删掉这些无关的字符串。把字符串中的所有大写英文字母转为小写,返回转换后的字符串,但是操作该函数的字符串不变。把字符串中的所有小写英文字母转为大写,返回转换后的字符串,但是操作该函数的字符串不变。位,其中的前六位是所在籍贯的省市县的编码,根据它,就可以知道一个人是哪里人。是分割符,它的含义是:原来的字符串以该分隔符为边界,分为若干个子字符串()之间的字符串,被截取的字符串不变,返回截取后获得的子字符串。匹配的子字符串,将这些子字符串全部转化为大写,

2024-07-11 01:35:36 855

原创 JavaScript ——函数

本关任务:用函数语句定义一个函数。先给一个例子,该函数的功能是返回数组元素的和;关键字function后面空一格,sumArray是函数的名字,其命名规范与变量名的命名规范相同:只能有字母、数字、下划线和美元符号,不能以数字开头,不能是关键字。括号中是参数,又叫形式参数,只需要参数名就可以。参数可以是0个、1个或者多个,相互之间用隔开,{}中间包含的是函数体。含有一条或者多条语句。函数体用来实现函数的功能。关键字return后面是函数的返回值,函数也可以没有返回值。

2024-07-08 01:59:35 865

原创 JavaScript——continue语句

比如上一关的例子中,原要求是遇到第一个负数时结束输出。现在把要求改成:输出数组中的所有正数。本关任务:计算数组中所有正数或者所有负数的和。含义十分接近的关键字,本关将详细剖析。本关的编程任务是补全右侧代码片段中。下面的语句不再执行,直接进入。上一实训介绍了关键字。

2024-07-07 01:27:21 302

原创 JavaScript——break语句

在很多情况下,不能确定循环次数,即循环会在进行到满足某个特定的条件时结束。比如,当数组中出现第二个整数。下面的所有语句以及剩余的所有循环,而直接执行循环体外下面的第一句。下面的例子输出一个数组,当遇到数组中第一个负数时,结束输出。前四关介绍了四种循环结构,这些结构都是建立在。条件语句一起使用,表示满足该条件时结束循环。时,结束元素的输出。这些情况下就需要使用。本关的编程任务是补全右侧代码片段中。本关任务:求数组中的质数。

2024-07-07 01:25:39 230

原创 JavaScript——for in类型

对象所有表示产地的属性的值(这些值都是字符串),然后拼接这些值,并返回;添加新的表示产地的属性,也有可能修改已有的属性的值,所以不要投机取巧哦;,对象类型是键值对的集合,键指的是属性的名字,值指的是属性的值。除了枚举对象自己拥有的可枚举属性外,还会枚举。本关任务:完成一个计算苹果产地的函数。本关的编程任务是补全右侧代码片段中。有多个属性表示它的产地,比如。开头,和产地无关的属性都不以。表示省份,这些属性都以。注意我们有可能通过参数。

2024-07-06 01:52:13 429

原创 JavaScript——for类型

初始化只执行一次,条件表达式在每一次进入循环体之前执行,修改值在每次执行完循环体之后进行。循环体内执行结束后,修改值操作会修改变量的值,紧接着再次执行条件表达式,根据返回值决定是否进入循环体,这个步骤会一直重复进行下去,初始化、条件表达式、修改值都操作控制循环次数的变量,初始化对该变量赋一个。的一个缺点是循环的次数不够直观,需要通过计算表达式何时返回。定义“倒数”如下:把一个数的各位的顺序颠倒,如。的初始化和增加都是在括号内,循环体内只有一句。本关任务:求一个数的“倒数”。与上一关不同的是,这里变量。

2024-07-06 01:50:15 405

原创 JavaScript——do while类型

第一遍循环体内的语句执行结束后,检测条件表达式的返回值,如果返回。本关任务:完成一个函数,用于计算两个参数之间的所有整数的和。判断条件表达式是否成立,也就是说,循环体内的语句。循环适合用在循环体至少会被执行一次的场景。本关的编程任务是补全右侧代码片段中。将会第二次执行循环体,返回。还是第一关中的例子,输出。

2024-07-05 00:01:06 183

原创 JavaScript——while类型

在执行大括号内的语句块的过程中,条件表达式内的某些变量的值会被改变,等到下一次执行的时候条件表达式有可能不再成立。和条件语句一样,循环语句先判断条件表达式是否成立,如果成立,执行大括号内部的语句块;条件表达式,判断表达式是否成立,成立则执行大括号内语句块,不成立执行循环体外下一句。,直到条件表达式不再成立为止,也就是说,大括号内的语句块有可能被执行多次。,这样总会在某个循环时,条件表达式不再成立,循环结束。在选择结构中,条件会被测试一次,成立则执行。在上面的例子中,条件表达式中的。语句块执行结束后,再次。

2024-07-04 23:58:53 326

原创 JavaScrip——switch类型

中的对象类型,严格相等要求双方的引用相同,即必须是同一个对象。中的内置数据类型,如数字,字符串,布尔型等。的属性名、属性值都相等,但是不满足严格相等,因为它们是不同的对象,指向内存的不同地方。结构,实际开发的过程中,还会遇到多分支的情况,比如根据电话号码判断运营商,如果用。返回湖泊的名字,湖泊的名称和面积的对照表在最上面的任务描述里面,这里不再赘述;是一种多分支的选择结构,采用等值判断,如下是结构图,其中。语句之前,先要知道严格相等的概念,严格相等的符号为。条件的地方开始执行,一直执行到最后,不符合的。

2024-07-04 01:14:43 930

原创 JavaScript:if-else类型

相当于干路分成了两条支路,程序执行遇到分支的时候,必须且只能选择其中一条继续执行,结束后回到干路。语句是一条连接在干路上的支路,满足某个条件时程序进入支路中执行,执行完后回到干路。在编程中,我们常常根据变量是否满足某个条件来执行不同的语句。语句相当于一条主干路,从第一句开始执行直到最后一句。是条件成立时你希望执行的语句,条件不成立时执行语句。关键字开头的条件语句达到以上目的,根据。本关的编程任务是补全右侧代码片段中。后面的括号内的表达式的计算结果为。从代码的缩进角度看来,程序中的。遵循的是就近匹配,即。

2024-07-04 01:11:07 243

原创 JavaScript——数组的创建、读写和长度

数组的长度也可以写入,当写入的值小于数组的实际长度时,数组会被删除一部分。大于实际长度时,数组会在尾部添加一些空的区域。这种情况下可以设置数组的长度(即数组中元素的个数),也可以不设置。数组元素的读取和写入在形式上相似,都是用赋值符号连接的两个表达式。创建数组有两种方法,一是使用数组字面量,简单来说就是在。中数组的元素可以是不同的数据类型,如上面的第三个数组。本关任务:掌握创建数组的方法,获取数组的元素和长度。数组长度指数组中元素的个数,等于最大索引值加。数组的出现就是为了批量处理数据。

2024-07-02 23:51:35 360

原创 JavaScript——数组元素的增减

中,为数组增加元素可以在数组头部(索引最小处)或者尾部进行,可以使用数组的方法或者直接使用运算符。运算符后接要删除的元素,但是删除后,会有一个空占位符,所以数据的长度保持不变。的作用是删除数组头部一个元素并返回该元素,然后所有元素往索引值小的方向移动一位。方法在数组的头部添加元素,并返回数组新的长度,其余元素自动向索引大的方向移动。函数,往数组的末尾添加一个或多个元素,参数是要添加的元素,返回数组长度。的一个特点,因为其他很多编程语言的数组是不允许增加或者删除元素的。,一次删除一个,并返回被删除的元素。

2024-07-02 23:48:16 508

原创 JavaScript——数组的遍历和多维数组

多维数组实际上就是数组的数组,指数组的每一个元素也是一个数组,这里仅讨论二维数组。数组的遍历指按顺序访问你数组的每一个元素。本关任务:将一个一维数组转换为二维数组,行优先。中二维数组的列的长度不唯一,第一列可以有。本关的编程任务是补全右侧代码片段中。创建仅知道长度的二维数组。列的二维数组,行优先;个元素,第二列可以有。

2024-07-02 23:44:19 484

原创 JavaScript——数组的常用方法

实现数组倒置,无参数,返回倒置后的数组,同时调用该方法的数组也会被倒置。两者都有两个参数,第一个参数为要查找的元素,第二个参数可选,为搜索的起点索引。将数组的所有元素连接起来组成字符串,参数为元素之间的分隔符,默认逗号。本关将介绍一些数组常用的方法,你可以通过调用这些方法生成复杂的代码。可选,表示切割的终点,该点不属于子数组。返回切割出的子数组,不修改原来的数组。合并这两个数组然后返回合并后的数组。,合并之后返回新数组,新数组为数组。表示切割的起点,该点属于子数组;本关任务:掌握数组的常用方法。

2024-07-02 01:09:23 487

原创 JavaScript——数组的应用内排序

第一次交换前,最大的元素9的索引是0,第二次交换前,最大元素8的索引是2,第三次交换前最大元素6的索引是0,第四次交换前最大元素5的索引是1,第五次交换前最大元素2的索引是1,第六次交换前最大元素0的索引是0。原理:遍历数组,记录下最大元素的索引值,将最大的元素与数组最后一个元素交换,这样最大的元素到了索引值最大的地方,称为一趟选择排序。第二趟选择排序是在除了最后一个元素的数组中选择最大的元素,将它与索引值第二大的元素交换,结束后第二大的元素也到了最终的位置上。第四趟冒泡过程中,未发生元素的交换,结束。

2024-07-02 01:05:46 764

原创 JavaScript——属性的检测和枚举

至于它们排列的顺序,在不同的浏览器中的结果不同,这里不讨论。本关任务:给定一个属性的名字,请先判断它属于哪一个对象,然后返回该对象的所有自有属性名连接成的字符串。),这是对象的属性的一个性质,用户自己定义的属性默认为可枚举,系统内置的对象的属性默认为不可枚举。所谓自有属性或者方法,是指对象自己定义的属性或者方法,而不是从原型链上继承来的。表示该对象,这个循环将依次遍历对象的所有可枚举属性,每次输出一个属性的值。的左侧是属性或者方法名,右侧是检查对象,对象有该属性或者方法则返回。

2024-07-01 02:05:11 554

原创 JavaScript——属性的增删改查

Luma Restaurant 以前的财务人员在统计销售额的时候不小心把数据弄错了,现在的财务人员想通过一个 JavaScript 函数方便的修改数据,并署上自己的名字,请你帮助她完成这个任务吧!属性的新增与修改在形式上完全相同,区别仅在于编译器会根据属性的名字判断是否有该属性,有则修改,没有则新增。需要注意的是,对象只能删除自己特有的属性,而不能删除继承自原型对象的属性。符号,符号的左边是对象的名字,双引号中间是属性的名字,这种情况下属性名可以是一个表达式,只要表达式的值是一个字符串即可。

2024-07-01 01:58:05 874

原创 JavaScript——对象的创建

JavaScript 中的一切都是对象,这是该语言一个很大的特点。像字符串、数组等已经定义的对象叫做内置对象。用户自己也可以定义对象,叫做自定义对象。本实训讲的对象特指自定义对象,自定义对象指数据和函数(又叫方法)的集合。数据指变量名和变量的值构成的组合。如图1所示:图1下面介绍五种创建对象的方法,其中通过对象字面量和使用构造函数创建对象最常用。

2024-07-01 01:53:02 853

原创 JavaScript——运算符的优先级和结合性

从上到下优先级逐渐降低。运算符的优先级是针对不同优先级的运算符来说的,对于同一级的运算符,运算顺序取决于运算符的结合性,比如加法和减法的优先级相同,而加法和减法都是从左向右结合,所以。上面图中的第三栏就是结合性,R 表示从右向左结合,L 表示从左到右结合,从左向右的占多数,这和我们在数学中的习惯相同。,结果再与1相加,所以乘法的优先级高于加法,在 JavaScript 中,不同的优先级也是这个作用。的完整代码,要求在函数体内第三句以及第五句中添加适当的括号,实现编程要求里面的要求。,即按照阅读的顺序计算。

2024-06-30 00:50:06 353

原创 JavaScript——条件和赋值运算符

赋值运算符的左边是一个变量或者对象的属性,右边是这个变量的值,意思是设置左边变量的值为右边的具体值。一般我们说到 JavaScript 中的三元运算符,指的就是条件运算符,因为它有三个操作数。的右边,第一个操作数如果是真值,整个表达式返回第二个操作数的值;第一个操作数如果是假值,返回第三个操作数的值。本关任务:计算并返回两个字符串中较大的字符串。除了基本的等号外,赋值运算符还可以和算术运算符结合。例如:对于字符串 aa 和 ab,要求返回 ab。条件运算符最主要的作用是代替选择结构,简化代码。

2024-06-30 00:40:12 271

原创 JavaScript——比较和逻辑运算符

从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回 false ,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;对于对象类型,相等或者严格相等比较的都是对象的引用,而不是具体的值,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、值都相等。当左操作数为假值时,返回左操作数。例如:a 为字符串 "d" ,b 为字符串 "b",因为字符串 "d" 大于字符串 "b",所以返回 "d" 逻辑与 "b",即字符串 "b"。

2024-06-30 00:37:42 783

原创 JavaScript——算术运算符

对两个数字相加和数学中一样,字符串相加就是拼接字符串的意思,比如 Java + Script 的结果是字符串 JavaScript。在数的左边时,表示先对数加1,再返回加1后的结果。本关任务:给定两个字符串变量,把它们转为数字后相除,拼接被除数、除数和余数为一个新的字符串。例如:a 为 "5",b 为 "3",则 c 为数字2,拼接后结果为字符串"532"。当字符串和数字相加时需要进行类型转换,数字会先转为字符串,然后再做字符串的拼接。返回 a 除以 b 得到的余数,结果与 a 的符号相同。

2024-06-29 01:40:49 581 1

原创 JavaScript数据类型转换

JavaScript 是一种弱类型语言,不同类型的变量在运算符的作用下会发生类型转换。这个是编译环境下直接进行的,所以叫隐式类型转换。方法只转换到字符串中第一个不是数字的字符为止,当然这个字符不包括第一个小数点。括号内有一个可选的参数,指以几进制的形式转换该字符串,如数字。第一个参数既有可能是12这种纯整数的字符串形式,也有可能是。得到的结果就是 C ,即12的16进制表示方式。第三个参数是纯小数的字符串形式,如12.2;,你需要分别把他们转换为整数,整数和小数。第二个参数是16进制数字的字符串形式,如。

2024-06-28 23:15:09 927

原创 JavaScript数据类型介绍

需要特别注意的是,字符串中的字符不能和外侧的单引号或者双引号构成一个引号对,如果字符串中有引号,需要用转义字符将这些引号变为普通字符,简单来说,转义字符的功能就是使字符串中的字符不被误认为该字符串的结束符号。JavaScript 是面向对象的语言,严格的来说,在 JavaScript 中,一切都可称为对象。数据称为数组中的元素,JavaScript 数组中的元素可以是不同的数据类型。在 JavaScript 中,没有字符的说法,字符看成长度为1的字符串,字符串指包含在单引号或者双引号中的文本。

2024-06-28 01:07:52 884 1

原创 JavaScript变量

全局变量 在函数外部申明的变量称为全局变量,全局变量的作用自申明的地方起,到整个 JavaScript 文件的末尾(包括这其中的所有函数的内部)。不同于 C 或 Java,JavaScript 是一种动态类型的语言,即申明的时候不指定变量的数据类型,而在运行的时候根据变量的具体值动态的判断变量的数据类型。变量的作用范围,或者说作用域,是指变量保持有效的范围,JavaScript 中的变量广义上来说分为局部变量和全局变量。需要注意的是,一个变量经过多次赋值,它的值为最后一次赋值的值。

2024-06-27 01:44:51 647

原创 JavaScript基础入门

JavaScript 诞生于1995年。Netscape 公司决定着手开发一种客户端语言解决简单的表单验证。就职于 Netscape 公司的布兰登·艾奇开始着手计划将1995年2月发布的 LiveScript 同时在浏览器和服务器中使用。Netscape 与 Sun 公司成立了一个开发联盟。Sun 公司正是 Java 的拥有者,而此时,Netscape 为了搭上媒体热炒 Java 的顺风车,临时把 LiveScript 改名为 JavaScript。

2024-06-17 02:51:29 1283 1

原创 CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

因为这里的动画比较简单,这样写没什么问题。但动画效果比较复杂时,需要计算的东西就比较多了,也比较麻烦。为了完成本关任务,你需要掌握:1.动画执行次数,2.动画反向播放。可以看出,这里动画只执行了一次。)称为一个动画的周期,也就是说,动画执行了一次。看作动画的一个周期。为了方便评测, CSS 都是需要以分号。时是直接消失的,怎么让它逐渐消失呢?根据提示,在右侧编辑器补充代码,实现。本关任务:用 CSS3 实现。让动画第二次反向播放。先创建一个动画名称为。然后把这个动画绑定到。,它规定了动画是否在。

2024-06-16 02:10:48 787

原创 CSS从入门到精通——动画:CSS3动画延迟和完成后状态的保持

上面已经实现了绿色小球向右移动的动画, 怎么在绿色小球动画完成时保持这个状态呢?红色小球和绿色小球的动画基本是一样的,调整一下位置就可以了。为了完成本关任务,你需要掌握:1.动画状态,2.动画完成时的状态,3.动画延迟。这里以绿色小球的移动来说明小球的状态。小球向右移动是利用定位来改变它的。它规定了动画在播放之前或之后,其动画效果是否可见。本关任务:用 CSS3 实现小车等待红绿灯的效果。运用第一关学到的知识,先创建一个动画名称为。来实现,它定义了动画在何时开始,默认为。然后把这个动画绑定到。

2024-06-16 02:06:00 710

原创 CSS从入门到精通——动画:简单的小动画

为了完成本关任务,你需要掌握:1.创建动画,2.绑定元素。来创建一个动画,然后把这个动画绑定到一个元素上就有效果了。本关任务:用 CSS3 实现简单的小动画。根据提示,在右侧编辑器补充代码,实现当。为了方便评测, CSS 都是需要以分号。创建一个动画,这个动画表示字体会从。

2024-06-16 02:02:10 635

原创 瀑布流布局:图片浏览页面

瀑布流布局是一种动态排列方式,其中每个元素(这里是图片)按照设定的列数依次排列,每列的高度会根据元素的高度动态调整,以实现整齐的展示效果。在本关中,你的任务是理解瀑布流布局,以展示多张图片。瀑布流布局使得图片能够按照设定的列数依次排列,每列的高度会根据图片的高度自动调整,以实现整齐的展示效果。考虑不同屏幕尺寸,使用响应式设计原则确保瀑布流布局能在不同设备上呈现良好的效果,比如通过设置图片宽度为百分比值或者自适应列数。属性提供图片的替代文本,以确保良好的可访问性。元素来插入图片,通过设置图片的。

2024-06-15 01:22:02 170

原创 相对与绝对布局:悬浮的提示框页面

包括字体、颜色、内边距、外边距等。

2024-06-15 01:15:44 355

原创 带侧边栏布局:带导航的网页

在本关中,你的任务是创建一个带侧边栏和导航的网页布局。这种布局通常用于网站或应用程序,其中侧边栏用于显示重要链接、菜单项或其他导航元素,而主内容区域用于显示具体页面内容。导航栏通常位于页面的顶部,提供网站的主要导航链接。区域内进行代码补充,完成CSS对页面的侧边栏和导航栏样式设计。定义页面的结构,包括侧边栏、导航栏和主内容区域。请仔细阅读右侧代码,结合相关知识,在。

2024-06-15 01:03:15 621

原创 CSS从入门到精通——盒模型

在 CSS 的默认盒子模型中,当我们指定一个CSS元素的高度与宽度时,只是指定了内容的宽度和高度。一个元素的大小,还包括其外边距、内边距和边框。修改bix-sizing中width和height属性,使得box-sizing类的元素内容大小与content-sizing的内容大小相同。) 是指内容周围的区域,内边距默认是透明的。同内边距一样,外边距简写时指定的顺序为顺时针。分别指定外边距区域的上边、右边、下边和左边的内边距。同样的,属性顺序为顺时针。,分别指定内容区域的上边、右边、下边和左边的内边距。

2024-06-14 00:41:59 751

原创 CSS入门到精通——表格样式

在实际情况中,我们可以根据需求设置表格对齐方式。设置表格中文字对齐的方式,与设置段落文字对齐的方式相同,都是使用。表格颜色设置十分简便,与设置文字颜色的方式相同。设置表格样式,使表格更优美。同样的,设置表格文字粗细与设置段落文字粗细相同,都是使用。设置表格样式,使表格更好看。设置表格样式,使表格更好看。但是,这样设置的通讯录表格有双边框。表格才会看起来更符合我们平时使用的表格。本关任务:在本关中,我们将学习如何使用。本关任务:在本关中,我们将学习如何使用。本关任务:在本关中,我们将学习如何使用。

2024-06-13 01:26:35 782

原创 CSS从入门到精通——背景样式

当页面较长时,滚动页面,背景图像也会随之滚动。从上面的实例中,大家学习了多种背景属性的设置,为了简化这些属性的书写,我们可以将这些属性合并在同一个属性中。当图像作为背景和文本显示在同一个位置时,为了页面排版更优美、更易于文本的阅读,我们可以使用。请在右侧的编辑框中修改。属性设置元素的背景属性,常见的网页背景图就是这样设置的。文档的所有内容,所以如果要改变整个页面的背景颜色,只需要设置。本关任务:在本关中,我们将学习如何使用。本关任务:在本关中,我们将学习如何使用。本关任务:在本关中,我们将学习如何使用。

2024-06-12 01:29:39 1382

原创 CSS id选择器

选择器类似,那么它们的区别是什么呢?一般情况下,都推荐使用类选择器。选择器与我们上一关中学习的类选择器类似,但在使用上有不同。选择器的方式完成页面菜单栏样式布局,栏目导航等任务。使用类选择器时,指定一个元素属于某类,使用的是关键字。文档中,可以为任意多个元素指定类,但。选择器在页面中定义锚,在编写。对于上面类选择器的例子,用。中想要应用类样式的元素,指定。它们最大的区别在于,在一个。选择器时,使用的是关键字。然后,书写相应类的样式。选择器只能使用一次,一个。在样式表中,指定对应。同理,我们可以看出,

2024-06-11 01:13:31 644

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除