自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 javascript基础从小白到高手系列三千九百八十三:原子读和写

如果这个值被修改了,那么执行写操作将会破坏其他线程计算的值。除了读写缓冲区的值,Atomics.load()和Atomics.store()还可以构建“代码围栏”。引擎保证非原子指令可以相对于load()或store()本地重排,但这个重排不会侵犯原子读/写的边界。 使用原子读或原子写保证所有指令(包括原子和非原子指令)都不会相对原子读/写重新排序。这意味着位于原子读/写之前的所有指令会在原子读/写发生前完成,而位于原子读/写之后的所有。// 非原子读可以保证在原子写完成后发生,因此这里一定会读到2。

2025-04-02 12:42:44 183

原创 javascript基础从小白到高手系列三千九百八十二:原子操作基础

其中多数方法以一个TypedArray 实例(一个SharedArrayBuffer 的引用)作为第一个参数,以相。任何全局上下文中都有Atomics 对象,这个对象上暴露了用于执行线程安全操作的一套静态方法,关操作数作为后续参数。

2025-04-02 12:42:25 200

原创 javascript基础从小白到高手系列三千九百八十一:JavaScript API

原子操作也让并发访问。Cryptography API 和Notifications API,只为一个特性定义了一个API。API 可以通过腻子脚本来模拟,但腻子脚本通常会带来性能问题,此外也会增加网站JavaScript 代码的。一些规范如HTML5,定义了一批增强已有标准的API 和浏览器特性。随着Web 浏览器能力的增加,其复杂性也在迅速增加。最终,是否使用这些比较新的API 还要看项目是支持更多浏览器,还是要采用更多现代特性。很稳定的原子行为基础之上,构建复杂的多线程JavaScript 程序。

2025-04-02 12:39:29 136

原创 javascript基础从小白到高手系列三千九百八十:通过表单提交富文本

在表单提交之前,从内嵌窗格或contenteditable 元素中提取出HTML 并插入隐藏字段中。这里,代码使用文档主体的innerHTML 属性取得了内嵌窗格的HTML,然后将其插入名为"comments"因为富文本编辑是在内嵌窗格中或通过为元素指定contenteditable 属性实现的,而不是在表单。这意味着要把富文本编辑的结果提交给服务器,默认情况下,可以切换文本的粗体、斜体样式,也可以使用剪贴板功。使用标准的DOM技术,可以为选择框添加或移除选项,也可以将选项从一个选择框移动到另一个选择。

2025-04-02 12:38:56 305

原创 javascript基础从小白到高手系列三千九百七十九:富文件选择

现比execCommand()更细粒度的控制,因为可以直接对选中文本的DOM 内容进行操作。IE8 及更早版本不支持DOM 范围,不过它们允许通过专有的selection 对象操作选中的文本。在内嵌窗格中使用getSelection()方法,可以获得富文本编辑器的选区。 collapse(node, offset):将选区折叠到给定节点中给定的文本偏移处。 getRangeAt(index):返回选区中指定索引处的DOM范围。 removeRange(range):从选区中移除指定的DOM 范围。

2025-04-02 12:38:26 219

原创 javascript基础从小白到高手系列三千九百七十八:与富文本交互

与富文本编辑器交互的主要方法是使用document.execCommand()。这个方法在文档上执行既定的命令,可以实现大多数格式化任务。document.execCommand()可以接收3 个参数:要执行的命令、表示浏览器是否为命令提供用户界面的布尔值和执行命令必需的值(如果不需要则为null)。为跨浏览器兼容,第二个参数应该始终为false,因为Firefox 会在其为true 时抛出错误。不同浏览器支持的命令也不一样。下表列出了最常用的命令。命 令 值(第三个参数) 说 明。

2025-04-02 12:37:55 170

原创 javascript基础从小白到高手系列三千九百七十七:富文本编辑

还有一种处理富文本的方式,也是IE 最早实现的,即指定contenteditable 属性。可以给页面中的任何元素指定contenteditable 属性,然后该元素会立即被用户编辑。这种方式更受欢迎,因为。contentEditable 属性有3 个可能的值:"true"表示开启,"false"表示关闭,"inherit"表示。通过designMode 属性,可以将这个空白文档变成可以编辑的,实际编辑的则是元素。都会变成可以编辑的(显示插入光标),从而可以像使用文字处理程序一样编辑文本,通过键盘将文本。

2025-04-02 12:37:18 202

原创 javascript基础从小白到高手系列三千九百七十六:移动和重排选项

为此需要使用DOM 合规的浏览器支持的hasAttribute()方法,而在IE8 及更早版本中要使用值的specified 属性。不过,要把选项移动到最后,还是appendChild()方法比较方便。项,然后以相同文本和值创建新选项,再将新选项添加到第二个选择框。个方法传入文档中已有的元素,则该元素会先从其父元素中移除,然后再插入指定位置。遍历选择框的每个选项时,只要有选项被选中,就将其添加到结果字符串。入字段在提交表单时包含文件的内容,但这些字段通常无法转换,因而也要排除在序列化之外。

2025-04-02 12:36:43 248

原创 javascript基础从小白到高手系列三千九百七十五:添加选项

以上代码创建了一个新的元素,使用文本节点添加文本,设置其value 属性,然后将其添加到选择框。IE8 及更早版本对add()方法的实现稍有不同,其第二个参数是可选的,如果要传入则必须是一个索引。与添加选项类似,移除选项的方法也不止一种。另一种添加新选项的方式是使用选择框的add()方法。的新选项和要添加到其前面的参考选项。值,表示要在其前面添加新选项的选项。以上代码可以在所有版本的IE 及DOM 合规的浏览器中使用。以使用appendChild()方法把这样创建的选项添加到选择框。

2025-04-02 12:36:05 213

原创 javascript基础从小白到高手系列三千九百七十四:选项处理

设置selectedIndex会移除所有选项,只选择指定的项,而获取selectedIndex 只会返回选中的第一项的索引。与selectedIndex 不同,设置选项的selected 属性不会在多选时移除其他选项,从而可以动态。环迭代所有选项,检测每个选项的selected 属性。对于只允许选择一项的选择框,获取选项最简单的方式是使用选择框的selectedIndex 属性,如。如果修改单选框中选项的selected 属性,则其他选项会被移除。这个函数会返回给定选择框中所有选中项的数组。

2025-04-02 12:35:35 109

原创 javascript基础从小白到高手系列三千九百七十三:禁用验证

选择框的type 属性可能是"select-one"或"select-multiple",具体取决于multiple 属性。如果选中这个选择框中的第一项,则字段的值就是"Sunnyvale, CA"。 selectedIndex:选中项基于0 的索引值,如果没有选中项则为–1。 如果有一个选中项,且其value 属性有值,则选择框的值就是选中项value 属性的值。被选中,则字段的值是一个空字符串,因为该项的value 属性是空字符串。最后强调一下,选择框的change 事件与其他表单字段是不一样的。

2025-04-02 12:35:02 163

原创 javascript基础从小白到高手系列三千九百七十二:数值范围

入的,包括:“number”、“range”、“datetime”、“datetime-local”、“date”、“month”、“week” tooLong:如果字段值的长度超过了maxlength 属性指定的值则返回true。除了"email"和"url",HTML5 还定义了其他几种新的输入元素类型,它们都是期待某种数值输。都可以使用,如果字段值有效就会返回true,否则返回false。提到的约束条件,因此必填字段如果没有值就会被视为无效,而字段值不匹配pattern 属性也会被视。

2025-04-02 12:34:22 132

原创 javascript基础从小白到高手系列三千九百七十一:读取响应状态信息

克隆Response 对象的主要方式是使用clone()方法,这个方法会创建一个一模一样的副本,不。如果响应对象的bodyUsed 属性为true(即响应体已被读取),则不能再创建这个对象的副本。此外,通过创建带有原始响应体的Response 实例,可以执行伪克隆操作。对于重定向响应,这是最终的URL,非重定向响应就是它产生的。Response 对象包含一组只读属性,描述了请求完成后的状态,如下表所示。 error:表示响应对象是通过Response.error()创建的。可能是下列字符串值之一。

2025-04-02 12:33:50 151

原创 javascript基础从小白到高手系列三千九百七十:Response 对象

Response 类还有两个用于生成Response 对象的静态方法:Response.redirect()和Response.Response 对象的期约,这个Response 对象代表实际的HTTP 响应。另一个静态方法Response.error()用于产生表示网络错误的Response 对象(网络错误会导致。还可以接收一个可选的init 对象,这个对象可以包含下表所列的键和值。大多数情况下,产生Response 对象的主要方式是调用fetch(),它返回一个最后会解决为。用响应体的不同方式。

2025-04-02 12:33:11 151

原创 javascript基础从小白到高手系列三千九百六十九:克隆Request 对象

Fetch API 提供了两种不太一样的方式用于创建Request 对象的副本:使用Request 构造函数和使。关键在于,通过fetch 使用Request 会将请求体标记为已使用。要想基于包含请求体的相同Request 对象多次调用fetch(),必须在第一次发送fetch()请求前。第二种克隆Request 对象的方式是使用clone()方法,这个方法会创建一模一样的副本,任何值。如果请求对象的bodyUsed 属性为true(即请求体已被读取),那么上述任何一种方式都不能用来。创建这个对象的副本。

2025-04-02 12:32:30 173

原创 javascript基础从小白到高手系列三千九百六十八:与富文本交互

与富文本编辑器交互的主要方法是使用document.execCommand()。这个方法在文档上执行既定的命令,可以实现大多数格式化任务。document.execCommand()可以接收3 个参数:要执行的命令、表示浏览器是否为命令提供用户界面的布尔值和执行命令必需的值(如果不需要则为null)。为跨浏览器兼容,第二个参数应该始终为false,因为Firefox 会在其为true 时抛出错误。不同浏览器支持的命令也不一样。下表列出了最常用的命令。命 令 值(第三个参数) 说 明。

2025-04-01 15:11:41 456

原创 javascript基础从小白到高手系列三千九百六十六:移动和重排选项

为此需要使用DOM 合规的浏览器支持的hasAttribute()方法,而在IE8 及更早版本中要使用值的specified 属性。不过,要把选项移动到最后,还是appendChild()方法比较方便。项,然后以相同文本和值创建新选项,再将新选项添加到第二个选择框。个方法传入文档中已有的元素,则该元素会先从其父元素中移除,然后再插入指定位置。遍历选择框的每个选项时,只要有选项被选中,就将其添加到结果字符串。入字段在提交表单时包含文件的内容,但这些字段通常无法转换,因而也要排除在序列化之外。

2025-04-01 15:10:56 226

原创 javascript基础从小白到高手系列三千九百六十五:添加选项

以上代码创建了一个新的元素,使用文本节点添加文本,设置其value 属性,然后将其添加到选择框。IE8 及更早版本对add()方法的实现稍有不同,其第二个参数是可选的,如果要传入则必须是一个索引。与添加选项类似,移除选项的方法也不止一种。另一种添加新选项的方式是使用选择框的add()方法。的新选项和要添加到其前面的参考选项。值,表示要在其前面添加新选项的选项。以上代码可以在所有版本的IE 及DOM 合规的浏览器中使用。以使用appendChild()方法把这样创建的选项添加到选择框。

2025-04-01 15:10:22 203

原创 javascript基础从小白到高手系列三千九百六十四:选项处理

设置selectedIndex会移除所有选项,只选择指定的项,而获取selectedIndex 只会返回选中的第一项的索引。与selectedIndex 不同,设置选项的selected 属性不会在多选时移除其他选项,从而可以动态。环迭代所有选项,检测每个选项的selected 属性。对于只允许选择一项的选择框,获取选项最简单的方式是使用选择框的selectedIndex 属性,如。如果修改单选框中选项的selected 属性,则其他选项会被移除。这个函数会返回给定选择框中所有选中项的数组。

2025-04-01 15:09:49 329

原创 javascript基础从小白到高手系列三千九百六十三:禁用验证

选择框的type 属性可能是"select-one"或"select-multiple",具体取决于multiple 属性。如果选中这个选择框中的第一项,则字段的值就是"Sunnyvale, CA"。 selectedIndex:选中项基于0 的索引值,如果没有选中项则为–1。 如果有一个选中项,且其value 属性有值,则选择框的值就是选中项value 属性的值。被选中,则字段的值是一个空字符串,因为该项的value 属性是空字符串。最后强调一下,选择框的change 事件与其他表单字段是不一样的。

2025-04-01 15:08:44 293

原创 javascript基础从小白到高手系列三千九百六十二:修饰键

relatedTarget 属性,但提供了其他的可以访问到相关元素的属性。和mouseout 事件发生时才包含值,其他所有事件的这个属性的值都是null。对mouseover 和mouseout 事件而言,还存在与事件相关的其他元素。时被按下的修饰键的名称。光标的元素,相关元素是失去光标的元素。类似地,对mouseout 事件来说,事件的主要目标是失去光。元素上会触发mouseout 事件,相关元素为元素。虽然鼠标事件主要是通过鼠标触发的,但有时候要确定用户想实现的操作,还要考虑键盘按键的状。

2025-04-01 15:08:02 274

原创 javascript基础从小白到高手系列三千九百六十一:进度事件

每次请求都会首先触发loadstart 事件,之后是一个或多个progress 事件,接着是error、abort。每次触发时,onprogress 事件处理程序都会收到event 对象,其target 属性是XHR 对象,且。onload 事件处理程序会收到一个event 对象,其target 属性设置为XHR 实例,在这个实例上。Mozilla 在XHR 对象上另一个创新是progress 事件,在浏览器接收数据期间,这个事件会反复触。只要是从服务器收到响应,无论状态码是什么,都会触发load 事件。

2025-04-01 15:07:19 366

原创 javascript基础从小白到高手系列三千九百六十:XMLHttpRequest Level 2

XMLHttpRequest Level 1 只是把已经存在的XHR 对象的实现细节明确了一下。Firefox 首先引入了overrideMimeType()方法用于重写XHR 响应的MIME 类型。时间且在该时间过后没有收到响应时,XHR 对象就会触发timeout 事件,调用ontimeout 事件处理。IE8 给XHR 对象增加了一个timeout 属性,用于表示发送请求后等待多少毫秒,如果响应不成功。假设服务器实际发送了XML 数据,但响应头设置的MIME 类型是text/plain。

2025-04-01 15:06:48 286

原创 javascript基础从小白到高手系列三千九百五十九:GET 请求

假如没有发送Content-Type 头部,PHP 的全局$_POST 变量中就不会包含数据,而需要通过。在这个函数中,来自ID 为"user-info"的表单中的数据被序列化之后发送给了服务器。请求体中携带提交的数据,而GET 请求则不然。POST 请求的请求体可以包含非常多的数据,而且数据。第二个最常用的请求是POST 请求,用于向服务器发送应该保存的数据。步是创建对应格式的字符串。最常用的请求方法是GET 请求,用于向服务器查询某些信息。默认情况下,对服务器而言,POST 请求与提交表单是不一样的。

2025-04-01 15:06:09 313

原创 javascript基础从小白到高手系列三千九百五十八:HTTP 头部

为保证请求头部被发送,必须在open()之后、send()之前调用setRequestHeader(),如下面的例。的请求头部,可以使用setRequestHeader()方法。可以使用getResponseHeader()方法从XHR 对象获取响应头部,只要传入要获取头部的名称即。 Referer:发送请求的页面的URI。虽然不同浏览器发送的确切头部字段可能各不相同,但这些通常都是会发送的。通过解析以上头部字段的输出,就可以知道服务器发送的所有头部,而不需要单独去检查了。有响应头部的字符串。

2025-04-01 15:05:35 187

原创 javascript基础从小白到高手系列三千九百五十七:网络请求与远程资源

无论是什么响应内容类型,responseText 属性始终会保存响应体,而responseXML则对于非XML 数据是null。文章中描绘了一个被他称作Ajax(Asynchronous JavaScript+XML,即异步JavaScript 加XML)的技术。 responseXML:如果响应的内容类型是"text/xml"或"application/xml”,那就是包含响应。查readyState 的值。一般来说,我们唯一关心的readyState 值是4,表示数据已就绪。这个对象最早由微软发明,

2025-04-01 15:05:02 359

原创 javascript基础从小白到高手系列三千九百五十六:解析选项

于传给JSON.stringify()的起过滤作用的替代函数(replacer),这个函数被称为还原函数(reviver)。ECMAScript 5 定义了原生JSON 对象,用于将JavaScript 对象序列化为JSON 字符串,以及将JSON。JSON 字符串后,又被重新解析为一个对象bookCopy。JSON.parse()方法也可以接收一个额外的参数,这个函数会针对每个键/值对都调用一次。实际上它们的格式完全一样,即还原函数也接收两个参数,属性名(key)和属性值(value),另外也。

2025-04-01 09:50:33 194

原创 javascript基础从小白到高手系列三千九百五十五:Beacon API

因为Web Socket 使用了自定义协议,所以URL 方案(scheme)稍有变化:不能再使用http://或https://,因为Web Socket 使用了自定义协议,所以URL 方案(scheme)稍有变化:不能再使用http://或https://,调用close()之后,readyState 立即变为2(连接正在关闭),并会在关闭后变为3(连接已经关闭)。调用close()之后,readyState 立即变为2(连接正在关闭),并会在关闭后变为3(连接已经关闭)。在JavaScript。

2025-04-01 09:50:10 199

原创 javascript基础从小白到高手系列三千九百五十四:使用ReadableStream 主体

因为可以使用ReadableStream 创建Response 对象,所以就可以在读取流之后,将其通过管道。要将Uint8Array 转换为可读文本,可以将缓冲区传给TextDecoder,返回转换后的值。缓冲区的大小,以及浏览器是否等待缓冲区被填充后才将其推到流中,要根据JavaScript 运行时的。在这些例子中,当读取完Uint8Array 块之后,浏览器会将其标记为可以被垃圾回收。从TCP/IP 角度来看,传输的数据是以分块形式抵达端点的,而且速度受到网速的限制。此外,浏览器如果决定不等待网络,

2025-04-01 09:48:28 195

原创 javascript基础从小白到高手系列三千九百五十三:跨源资源共享

注意,服务器也可以在预检请求的。如果服务器决定响应请求,那么应该发送Access-Control-Allow-Origin 头部,包含相同的源;在这个请求发送后,服务器可以确定是否允许这种类型的请求。 Access-Control-Request-Headers:(可选)要使用的逗号分隔的自定义头部列表。对于简单的请求,比如GET 或POST 请求,没有自定义头部,而且请求体是text/plain 类型, Access-Control-Allow-Headers:服务器允许的头部(逗号分隔的列表)。

2025-04-01 09:47:47 215

原创 javascript基础从小白到高手系列三千九百五十二:进度事件

每次请求都会首先触发loadstart 事件,之后是一个或多个progress 事件,接着是error、abort。每次触发时,onprogress 事件处理程序都会收到event 对象,其target 属性是XHR 对象,且。onload 事件处理程序会收到一个event 对象,其target 属性设置为XHR 实例,在这个实例上。Mozilla 在XHR 对象上另一个创新是progress 事件,在浏览器接收数据期间,这个事件会反复触。只要是从服务器收到响应,无论状态码是什么,都会触发load 事件。

2025-03-31 12:12:11 249

原创 javascript基础从小白到高手系列三千九百五十一:使用cookie 的注意事项

Web Storage 的第2 版定义了两个对象:localStorage 和sessionStorage。的空间大小,尽管IE8 提供了remainingSpace 属性,用于确定还有多少存储空间(以字节计)可用。保存的cookie 越大,请求完成的时间就越长。永久存储机制,sessionStorage 是跨会话的存储机制。对cookie 的限制及其特性决定了cookie 并不是存储大量数据的理想方式。个数据项都作为属性存储在该对象上,所以可以使用点或方括号操作符访问这些属性,通过同样的操作。

2025-03-31 12:11:41 257

原创 javascript基础从小白到高手系列三千九百五十:子cookie

的名称,第二个元素是子cookie 的值。set()方法接收7 个参数:cookie 的名称、子cookie 的名称、子cookie 的值、可选的Date 对象用。用于取得所有子cookie,并以对象形式返回,对象的属性是子cookie 的名称,值是子cookie 的值。于设置cookie 的过期时间、可选的cookie 路径、可选的cookie 域和可选的布尔值secure 标志。setAll()方法接收6 个参数:cookie 的名称、包含所有子cookie 的对象,然后是set()方法中使。

2025-03-31 12:11:06 236

原创 javascript基础从小白到高手系列三千九百四十九:cookie 的构成

http://www.wrox.com/books/访问,因此访问http://www.wrox.com/下的页面就不会发送cookie,即。这个头部设置一个名为"name"的cookie,这个cookie 在2007 年1 月22 日7:10:24 过期,对。www.wrox.com),也可以不包含(如.wrox.com 表示对wrox.com 的所有子域都有效)。求https://www.wrox.com 会发送cookie,而请求http://www.wrox.com则不会。这个值可能包含子域(如。

2025-03-31 12:10:35 299

原创 javascript基础从小白到高手系列三千九百四十八:Headers 独有的特性

response 在通过构造函数初始化Response 对象时激活不允许修改禁止修改的响应头部(参见MDN 文。Headers 实例中还不存在的头部上调用append()方法相当于调用set()。在初始化Headers 对象时,也可以使用键/值对形式的对象,Headers 实例会因来源不同而展现不同的行为,它们的行为由护卫来控制。不同的护卫设置会改变set()、append()和delete()的行为。一个HTTP 头部字段可以有多个值,而Headers 对象通过append()方法支持添加多个值。

2025-03-31 12:09:55 278

原创 javascript基础从小白到高手系列三千九百四十七:中断请求

Headers 与Map 类型都有get()、set()、has()和delete()Headers 实例,可以通过Request.prototype.headers 访问,每个入站Response 实例也可以通过。Response.prototype.headers 访问包含着响应头部的Headers 对象。这是合理的,因为HTTP 头部本质上是序列化后的键/值对,Headers 对象是所有外发请求和入站响应头部的容器。另外,使用new Headers()也可以创建一个新实例。// 确定值已经删除。

2025-03-31 12:08:56 398

原创 javascript基础从小白到高手系列三千九百四十六:常见Fetch 请求模式

与XMLHttpRequest 一样,fetch()既可以发送数据也可以接收数据。使用init 对象参数,可。以配置fetch()在请求体中发送各种序列化的数据。

2025-03-31 12:08:18 353

原创 javascript基础从小白到高手系列三千九百四十四:替代性跨源技术

JSONP 是“JSON with padding”的简写,是在Web 服务上流行的一种JSON 变体。这个例子创建了一个新的Image 实例,然后为它的onload 和onerror 事件处理程序添加了同一。这个JSONP 请求的URL 是一个地理位置服务。CORS 出现之前,实现跨源Ajax 通信是有点麻烦的。数据通过查询字符串发送,响应可以随意设置,不过一般是位图图片或值为204 的状态码。函数的名称是通过请求来动态指定的。当然,图片探测的缺点是只能发。标签实现跨域通信的最早的一种技术。

2025-03-31 12:07:04 243

原创 javascript基础从小白到高手系列三千九百四十三:跨源资源共享

注意,服务器也可以在预检请求的。如果服务器决定响应请求,那么应该发送Access-Control-Allow-Origin 头部,包含相同的源;在这个请求发送后,服务器可以确定是否允许这种类型的请求。 Access-Control-Request-Headers:(可选)要使用的逗号分隔的自定义头部列表。对于简单的请求,比如GET 或POST 请求,没有自定义头部,而且请求体是text/plain 类型, Access-Control-Allow-Headers:服务器允许的头部(逗号分隔的列表)。

2025-03-31 12:06:30 278

原创 javascript基础从小白到高手系列三千九百四十二:进度事件

每次请求都会首先触发loadstart 事件,之后是一个或多个progress 事件,接着是error、abort。每次触发时,onprogress 事件处理程序都会收到event 对象,其target 属性是XHR 对象,且。onload 事件处理程序会收到一个event 对象,其target 属性设置为XHR 实例,在这个实例上。Mozilla 在XHR 对象上另一个创新是progress 事件,在浏览器接收数据期间,这个事件会反复触。只要是从服务器收到响应,无论状态码是什么,都会触发load 事件。

2025-03-31 12:05:44 222

空空如也

空空如也

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

TA关注的人

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