Bootstrap5 复选框与单选框
最后更新于:2022-03-27 03:03:40
Bootstrap5 复选框与单选框
如果您希望用户从预设选项列表中选择任意数量的选项,可以使用复选框:
实例
<input class="form-check-input" type="checkbox" id="check1" name="option1" value="something" checked>
<label class="form-check-label">Option 1</label>
</div>
复选框通过使用 class=”form-check” 来确保标签和复选框有适当边距。
.form-check-label 类添加到标签元素,.form-check 容器内添加 .form-check-input 类来设置复选框的样式。
checked 属性用于设置默认选中的选项。
单选框
如果您希望用户从预设选项列表中选择一个选项,可以使用复选框:
实例
<input type="radio" class="form-check-input" id="radio1" name="optradio" value="option1" checked>Option 1
<label class="form-check-label" for="radio1"></label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" id="radio2" name="optradio" value="option2">Option 2
<label class="form-check-label" for="radio2"></label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" disabled>Option 3
<label class="form-check-label"></label>
</div>
切换开关
如果你想把复选框变成一个可切换的开关,可以在 .form-check 容器内使用 .form-switch 类:
实例
<input class="form-check-input" type="checkbox" id="mySwitch" name="darkmode" value="yes" checked>
<label class="form-check-label" for="mySwitch">Dark Mode</label>
</div>
Bootstrap5 下拉菜单
最后更新于:2022-03-27 03:03:36
Bootstrap5 下拉菜单
下拉菜单可以是单选下拉菜单,也可以是多选的下拉菜单。
单选下拉菜单:
多选下拉菜单:
在 Bootstrap5 中下拉菜单 <select> 元素可以使用 .form-select 类来渲染 :
实例
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
下拉菜单通过 .form-select-lg 或 .form-select-sm 类来修改大小:
实例
<select class="form-select">
<select class="form-select form-select-sm">
效果如下图:
disabled 属性可以禁止下拉菜单被选择:
实例
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
数据列表
Bootstrap 也可以通过 datalist 标签为 <input> 元素设置下拉菜单:
以下实例从列表中选择一个网站:
实例
<input class="form-control" list="sites" name="site" id="site">
<datalist id="sites">
<option value="Google">
<option value="Runoob">
<option value="Taobao">
<option value="Wiki">
<option value="Zhihu">
</datalist>
效果如下图:
Bootstrap5 表单
最后更新于:2022-03-27 03:03:32
Bootstrap5 表单
在本章中,我们将学习如何使用 Bootstrap 创建表单。Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单。
表单元素 <input>, <textarea>, 和
<select> elements
在使用 .form-control 类的情况下,宽度都是设置为 100%。
Bootstrap5 表单布局
- 堆叠表单 (全屏宽度):垂直方向
- 内联表单:水平方向
Bootstrap 提供了两种类型的表单布局:
堆叠表单
以下实例使用两个输入框,一个复选框,一个提交按钮来创建堆叠表单:
实例
<div class="mb-3 mt-3">
<label for="email" class="form-label">Email:</label>
<input type="email" class="form-control" id="email" placeholder="Enter email" name="email">
</div>
<div class="mb-3">
<label for="pwd" class="form-label">Password:</label>
<input type="password" class="form-control" id="pwd" placeholder="Enter password" name="pswd">
</div>
<div class="form-check mb-3">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" name="remember"> Remember me
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
显示效果:
实例中我们使用 .form-label 类来确保标签元素有一定的内边距。
复选框(checkboxe)使用不同的标记。 它们使用 .form-check 包裹在容器元素周围。复选框和单选按钮使用 .form-check-input,它的标签可以使用 .form-check-label 类。
内联表单
如果您希望表单元素并排显示,请使用 .row 和 .col:
以下实例的两个输入框并排显示,创建内联表单:
实例
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="Enter email" name="email">
</div>
<div class="col">
<input type="password" class="form-control" placeholder="Enter password" name="pswd">
</div>
</div>
</form>
显示效果:
文本框
使用 textarea 标签创建文本框提交表单,使用 .form-control 类渲染文本框 textareas 标签:
实例
<textarea class="form-control" rows="5" id="comment" name="text"></textarea>
显示效果:
输入框大小
我们可以通过在 .form-control 输入框中使用 .form-control-lg 或 .form-control-sm 类来设置输入框的大小:
实例
<input type="text" class="form-control" placeholder="正常大小输入框">
<input type="text" class="form-control form-control-sm" placeholder="小号输入框">
显示效果:
禁用/只读表单
使用 disabled/readonly 属性设置输入框禁用/只读:
实例
<input type="text" class="form-control" placeholder="Disabled input" disabled>
<input type="text" class="form-control" placeholder="Readonly input" readonly>
纯文本输入
使用 .form-control-plaintext 类可以删除输入框的边框::
实例
<input type="text" class="form-control" placeholder="Normal input">
取色器
使用 .form-control-color 类可以创建一个取色器:
显示效果:
Bootstrap5 Flex(弹性)布局
最后更新于:2022-03-27 03:03:27
Bootstrap5 Flex(弹性)布局
Bootstrap5 通过 flex 类来控制页面的布局。
弹性盒子(flexbox)
Bootstrap 3 与 Bootstrap 4/5 最大的区别就是 Bootstrap 4/5 使用弹性盒子来布局,而不是使用浮动来布局。
弹性盒子是 CSS3 的一种新的布局模式,更适合响应式的设计,如果你还不了解 flex,可以阅读我们的 CSS3 弹性盒子(Flex Box) 教程
注意:IE9 及其以下版本不支持弹性盒子,所以如果你需要兼容 IE8-9,请使用 Bootstrap 3。
以下实例使用 d-flex 类创建一个弹性盒子容器,并设置三个弹性子元素:
实例
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
创建显示在同一行上的弹性盒子容器可以使用 d-inline-flex 类:
实例
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
水平方向
.flex-row 可以设置弹性子元素水平显示,这是默认的。
使用 .flex-row-reverse 类用于设置右对齐显示,即与 .flex-row 方向相反。
实例
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div> <div class="d-flex flex-row-reverse bg-secondary">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
垂直方向
.flex-column 类用于设置弹性子元素垂直方向显示, .flex-column-reverse 用于翻转子元素:
实例
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div> <div class="d-flex flex-column-reverse">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
内容排列
.justify-content-* 类用于修改弹性子元素的排列方式,* 号允许的值有:start (默认), end, center, between 或 around:
实例
<div class="d-flex justify-content-end">…</div>
<div class="d-flex justify-content-center">…</div>
<div class="d-flex justify-content-between">…</div>
<div class="d-flex justify-content-around">…</div>
等宽
.flex-fill 类强制设置各个弹性子元素的宽度是一样的:
实例
<div class="p-2 bg-info flex-fill">Flex item 1</div>
<div class="p-2 bg-warning flex-fill">Flex item 2</div>
<div class="p-2 bg-primary flex-fill">Flex item 3</div>
</div>
扩展
.flex-grow-1 用于设置子元素使用剩下的空间。以下实例中前面两个子元素只设置了它们所需要的空间,最后一个获取剩余空间。 :
实例
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary flex-grow-1">Flex item 3</div>
</div>
提示: 使用 .flex-shrink-1 用于设置子元素的收缩规则。
排序
.order 类可以设置弹性子元素的排序,从 .order-1 到 .order-12,数字越低权重越高( .order-1 排在 .order-2 之前) :
实例
<div class="p-2 bg-info order-3">Flex item 1</div>
<div class="p-2 bg-warning order-2">Flex item 2</div>
<div class="p-2 bg-primary order-1">Flex item 3</div>
</div>
外边距
.ms-auto 类可以设置子元素右外边距为 auto,即 margin-right: auto!important;,.me-auto 类可以设置子元素左外边距为 auto,即 margin-left: auto!important;:
实例
<div class="p-2 ms-auto bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
<div class="d-flex mb-3 bg-secondary">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 me-auto bg-primary">Flex item 3</div>
</div>
包裹
弹性容器中包裹子元素可以使用以下三个类: .flex-nowrap (默认), .flex-wrap 或 .flex-wrap-reverse。设置 flex 容器是单行或者多行。
实例
内容对齐
我们可以使用 .align-content-* 来控制在垂直方向上如何去堆叠子元素,包含的值有:.align-content-start (默认), .align-content-end, .align-content-center, .align-content-between, .align-content-around 和 .align-content-stretch。
这些类在只有一行的弹性子元素中是无效的。
实例
子元素对齐
如果要设置单行的子元素对齐可以使用 .align-items-* 类来控制,包含的值有:.align-items-start, .align-items-end, .align-items-center, .align-items-baseline, 和 .align-items-stretch (默认)。
实例
指定子元素对齐
如果要设置指定子元素对齐对齐可以使用 .align-self-* 类来控制,包含的值有:.align-self-start, .align-self-end, .align-self-center, .align-self-baseline, 和 .align-self-stretch (默认)。
实例
<div class="p-2 border">Flex item 1</div>
<div class="p-2 border align-self-start">Flex item 2</div>
<div class="p-2 border">Flex item 3</div>
</div>
响应式 flex 类
我们可以根据不同的设备,设置 flex 类,从而实现页面响应式布局,以下表格中的 * 号可以的值有:sm, md, lg 或 xl, 对应的是小型设备、中型设备,大型设备,超大型设备。
类 | 实例 | 实现 |
---|---|---|
弹性容器 | ||
.d-*-flex |
根据不同的屏幕设备创建弹性盒子容器 | 尝试一下 |
.d-*-inline-flex |
根据不同的屏幕设备创建行内弹性盒子容器 | 尝试一下 |
方向 | ||
.flex-*-row |
根据不同的屏幕设备在水平方向显示弹性子元素 | 尝试一下 |
.flex-*-row-reverse |
根据不同的屏幕设备在水平方向显示弹性子元素,且右对齐 | 尝试一下 |
.flex-*-column |
根据不同的屏幕设备在垂直方向显示弹性子元素 | 尝试一下 |
.flex-*-column-reverse |
根据不同的屏幕设备在垂直方向显示弹性子元素,且方向相反 | 尝试一下 |
内容对齐 | ||
.justify-content-*-start |
根据不同屏幕设备在开始位置显示弹性子元素 (左对齐) | 尝试一下 |
.justify-content-*-end |
根据不同屏幕设备在尾部显示弹性子元素 (右对齐) | 尝试一下 |
.justify-content-*-center |
根据不同屏幕设备在 flex 容器中居中显示子元素 | 尝试一下 |
.justify-content-*-between |
根据不同屏幕设备使用 “between” 显示弹性子元素 | 尝试一下 |
.justify-content-*-around |
根据不同屏幕设备使用 “around” 显示弹性子元素 | 尝试一下 |
等宽 | ||
.flex-*-fill |
根据不同的屏幕设备强制等宽 | 尝试一下 |
扩展 | ||
.flex-*-grow-0 |
不同的屏幕设备不设置扩展 | |
.flex-*-grow-1 |
不同的屏幕设备设置扩展 | |
收缩 | ||
.flex-*-shrink-0 |
不同的屏幕设备不设置收缩 | |
.flex-*-shrink-1 |
不同的屏幕设备设置收缩 | |
包裹 | ||
.flex-*-nowrap |
不同的屏幕设备不设置包裹元素 | 尝试一下 |
.flex-*-wrap |
不同的屏幕设备设置包裹元素 | 尝试一下 |
.flex-*-wrap-reverse |
不同的屏幕设备反转包裹元素 | 尝试一下 |
内容排列 | ||
.align-content-*-start |
根据不同屏幕设备在起始位置堆叠元素 | 尝试一下 |
.align-content-*-end |
根据不同屏幕设备在结束位置堆叠元素 | 尝试一下 |
.align-content-*-center |
根据不同屏幕设备在中间位置堆叠元素 | 尝试一下 |
.align-content-*-around |
根据不同屏幕设备,使用 “around” 堆叠元素 | 尝试一下 |
.align-content-*-stretch |
根据不同屏幕设备,通过伸展元素来堆叠 | 尝试一下 |
排序 | ||
.order-*-0-12 |
在小屏幕尺寸上修改排序 | 尝试一下 |
元素对齐 | ||
.align-items-*-start |
根据不同屏幕设备,让元素在头部显示在同一行。 | 尝试一下 |
.align-items-*-end |
根据不同屏幕设备,让元素在尾部显示在同一行。 | 尝试一下 |
.align-items-*-center |
根据不同屏幕设备,让元素在中间位置显示在同一行。 | 尝试一下 |
.align-items-*-baseline |
根据不同屏幕设备,让元素在基线上显示在同一行。 | 尝试一下 |
.align-items-*-stretch |
根据不同屏幕设备,让元素延展高度并显示在同一行。 | 尝试一下 |
单独一个子元素的对齐方式 | ||
.align-self-*-start |
据不同屏幕设备,让单独一个子元素显示在头部。 | 尝试一下 |
.align-self-*-end |
据不同屏幕设备,让单独一个子元素显示在尾部 | 尝试一下 |
.align-self-*-center |
据不同屏幕设备,让单独一个子元素显示在居中位置 | 尝试一下 |
.align-self-*-baseline |
据不同屏幕设备,让单独一个子元素显示在基线位置 | 尝试一下 |
.align-self-*-stretch |
据不同屏幕设备,延展一个单独子元素 | 尝试一下 |
HTML DOM matches() 方法
最后更新于:2022-03-27 03:03:25
HTML DOM matches() 方法
实例
元素是否匹配 CSS 选择器?
let answer = element.matches(".container");
实例
元素是否匹配两个 CSS 选择器中的一个?
let answer = element.matches(".container, .wrapper");
定义和用法
如果元素匹配指定的 CSS 选择器,matches() 方法就返回 true,否则返回 false。
浏览器支持
表格中的数字是第一个完全支持 matches() 方法的浏览器版本:
Chrome 33 |
Edge 15 |
Firefox 34 |
Safari 7 |
Opera 21 |
Feb 2014 | Apr 2017 | Dec 2014 | Oct 2013 | May 2014 |
语法
element.matches(selectors)
参数
参数 | 描述 |
selectors |
必需。 要匹配的一个或多个 (多个用逗号 , 分隔) CSS 选择器。 返回的元素是在 HTML 文档中找到的第一个元素。 查看所有 CSS 选择器参考手册。 |
返回值
类型 | 描述 |
---|---|
Boolean |
true – 元素匹配 CSS 选择器。 false – 元素与 CSS 选择器不匹配。 |
HTML DOM firstElementChild 属性
最后更新于:2022-03-27 03:03:23
HTML DOM firstElementChild 属性
实例
获取 HTML 中 <ul> 元素的第一个子元素:
定义和用法
firstElementChild 属性返回指定元素的第一个子元素。
firstElementChild 属性与 firstChild, 属性的区别在于 firstChild 返回第一个子节点作为元素节点,包含文本节点或注释节点(取决于哪个是第一个),而 firstElementChild 返回第一个子节点作为元素节点(忽略文本和注释节点)。
该属性是只读的。
提示:使用 children 属性返回指定元素的任何子元素。
提示:要返回指定元素的最后一个子元素,请使用 lastElementChild 属性。
浏览器支持
属性 | |||||
---|---|---|---|---|---|
firstElementChild | 2.0 | 9.0 | 3.5 | 4.0 | 10.0 |
语法
element.firstElementChild
参数
None
返回值
类型 | 描述 |
---|---|
Object | 返回 Node 对象,表示元素的第一个子元素,如果没有子元素,则返回 null |
技术细节
DOM 版本 | Core Level 3 Element Traversal |
---|
更多实例
实例
获取 <div> 元素第一个子元素的标签名:
document.getElementById("demo").innerHTML = x;
实例
获取 <select> 元素第一个子元素的文本:
HTML DOM lastElementChild 属性
最后更新于:2022-03-27 03:03:21
HTML DOM lastElementChild 属性
实例
获取 HTML 中 <ul> 元素的最后一个子元素:
定义和用法
lastElementChild 属性返回指定元素的最后一个子元素。
lastElementChild 属性与 lastChild 属性的区别在于 lastChild 返回最后一个子节点作为元素节点,包含文本节点或注释节点(取决于哪个是最后一个),而 lastElementChild 返回最后一个子节点作为元素节点(忽略文本和注释节点)。
该属性是只读的。
提示:使用 children 属性返回指定元素的任何子元素。
提示:要返回指定元素的第一个子元素,请使用 firstElementChild 属性。
浏览器支持
属性 | |||||
---|---|---|---|---|---|
lastElementChild | 2.0 | 9.0 | 3.5 | 4.0 | 10.0 |
语法
element.lastElementChild
参数
None
返回值
类型 | 描述 |
---|---|
Object | 返回 Node 对象,表示元素的最后一个子元素,如果没有子元素,则返回 null |
技术细节
DOM 版本 | Core Level 3 Element Traversal |
---|
更多实例
实例
获取 <div> 元素最后一个子元素的标签名:
document.getElementById("demo").innerHTML = x;
实例
获取 <select> 元素最后一个子元素的文本:
Python 推导式
最后更新于:2022-03-27 03:03:18
Python 推导式
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
Python 支持各种数据结构的推导式:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
- 元组(tuple)推导式
列表推导式
列表推导式格式为:
[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] 或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition]
- out_exp_res:列表生成元素表达式,可以是有返回值的函数。
- for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
- if condition:条件语句,可以过滤列表中不符合条件的值。
过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:
实例
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
[‘ALICE’, ‘JERRY’, ‘WENDY’, ‘SMITH’]
计算 30 以内可以被 3 整除的整数:
实例
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
字典推导式
字典推导基本格式:
{ key_expr: value_expr for value in collection } 或 { key_expr: value_expr for value in collection if condition }
使用字符串及其长度创建字典:
实例
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{‘Google’: 6, ‘Runoob’: 6, ‘Taobao’: 6}
提供三个数字,以三个数字为键,三个数字的平方为值来创建字典:
实例
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class ‘dict’>
集合推导式
集合推导式基本格式:
{ expression for item in Sequence } 或 { expression for item in Sequence if conditional }
计算数字 1,2,3 的平方数:
实例
>>> setnew
{1, 4, 9}
判断不是 abc 的字母并输出:
实例
>>> a
{‘d’, ‘r’}
>>> type(a)
<class ‘set’>
元组推导式
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式基本格式:
(expression for item in Sequence ) 或 (expression for item in Sequence if conditional )
元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。
例如,我们可以使用下面的代码生成一个包含数字 1~9 的元组:
实例
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器对象
>>> tuple(a) # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)
JavaScript 静态方法
最后更新于:2022-03-27 03:03:16
JavaScript 静态方法
静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类的,但不属于对象,在实例化对象之前可以通过 类名.方法名 调用静态方法。
静态方法不能在对象上调用,只能在类中调用。
实例
constructor(name) {
this.name = name;
}
static hello() {
return "Hello!!";
}
} let noob = new Runoob("菜鸟教程"); // 可以在类中调用 ‘hello()’ 方法
document.getElementById("demo").innerHTML = Runoob.hello(); // 不能通过实例化后的对象调用静态方法
// document.getElementById("demo").innerHTML = noob.hello();
// 以上代码会报错
实例对象调用静态方法会报错:
如果你想在对象 noob 中使用静态方法,可以作为一个参数传递给它:
实例
constructor(name) {
this.name = name;
}
static hello(x) {
return "Hello " + x.name;
}
}
let noob = new Runoob("菜鸟教程");
document.getElementById("demo").innerHTML = Runoob.hello(noob);
JavaScript 类继承
最后更新于:2022-03-27 03:03:13
JavaScript 类继承
JavaScript 类继承使用 extends 关键字。
继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。
super() 方法用于调用父类的构造函数。
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类(父类),新建的类称为派生类(子类)。
继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。
代码如下:
class Animal {
// eat() 函数
// sleep() 函数
}; //派生类
class Dog extends Animal {
// bark() 函数
};
以下实例创建的类 “Runoob” 继承了 “Site” 类:
实例
constructor(name) {
this.sitename = name;
}
present() {
return ‘我喜欢‘ + this.sitename;
}
} class Runoob extends Site {
constructor(name, age) {
super(name);
this.age = age;
}
show() {
return this.present() + ‘, 它创建了 ‘ + this.age + ‘ 年。‘;
}
} let noob = new Runoob("菜鸟教程", 5);
document.getElementById("demo").innerHTML = noob.show();
super() 方法引用父类的构造方法。
通过在构造方法中调用 super() 方法,我们调用了父类的构造方法,这样就可以访问父类的属性和方法。
继承对于代码可复用性很有用。
getter 和 setter
类中我们可以使用 getter 和 setter 来获取和设置值,getter 和 setter 都需要在严格模式下执行。
getter 和 setter 可以使得我们对属性的操作变的很灵活。
类中添加 getter 和 setter 使用的是 get 和 set 关键字。
以下实例为 sitename 属性创建 getter 和 setter:
实例
constructor(name) {
this.sitename = name;
}
get s_name() {
return this.sitename;
}
set s_name(x) {
this.sitename = x;
}
} let noob = new Runoob("菜鸟教程"); document.getElementById("demo").innerHTML = noob.s_name;
注意:即使 getter 是一个方法,当你想获取属性值时也不要使用括号。
getter/setter 方法的名称不能与属性的名称相同,在本例中属名为 sitename。
很多开发者在属性名称前使用下划线字符 _ 将 getter/setter 与实际属性分开:
以下实例使用下划线 _ 来设置属性,并创建对应的 getter/setter 方法:
实例
constructor(name) {
this._sitename = name;
}
get sitename() {
return this._sitename;
}
set sitename(x) {
this._sitename = x;
}
} let noob = new Runoob("菜鸟教程"); document.getElementById("demo").innerHTML = noob.sitename;
要使用 setter,请使用与设置属性值时相同的语法,虽然 set 是一个方法,但需要不带括号:
实例
constructor(name) {
this._sitename = name;
}
set sitename(x) {
this._sitename = x;
}
get sitename() {
return this._sitename;
}
} let noob = new Runoob("菜鸟教程");
noob.sitename = "RUNOOB";
document.getElementById("demo").innerHTML = noob.sitename;
提升
函数声明和类声明之间的一个重要区别在于, 函数声明会提升,类声明不会。
你首先需要声明你的类,然后再访问它,否则类似以下的代码将抛出 ReferenceError:
实例
// noob = new Runoob("菜鸟教程")
// 报错 class Runoob {
constructor(name) {
this.sitename = name;
}
} // 这里可以使用类了
let noob = new Runoob("菜鸟教程")
使用前没有声明会报错:
使用前已经声明可以正常执行:
JavaScript 类(class)
最后更新于:2022-03-27 03:03:09
JavaScript 类(class)
类是用于创建对象的模板。
我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。
每个类中包含了一个特殊的方法 constructor(),它是类的构造函数,这种方法用于创建和初始化一个由 class 创建的对象。
创建一个类的语法格式如下:
constructor() { … }
}
实例:
实例
constructor(name, url) {
this.name = name;
this.url = url;
}
}
以上实例创建了一个类,名为 “Runoob”。
类中初始化了两个属性: “name” 和 “url”。
浏览器支持
表格中的数字表示支持该属性的第一个浏览器版本号。
Chrome 49 | Edge 12 | Firefox 45 | Safari 9 | Opera 36 |
Mar, 2016 | Jul, 2015 | Mar, 2016 | Oct, 2015 | Mar, 2016 |
使用类
定义好类后,我们就可以使用 new 关键字来创建对象:
实例
constructor(name, url) {
this.name = name;
this.url = url;
}
} let site = new Runoob("菜鸟教程", "https://docs.gechiui.com/w3school");
创建对象时会自动调用构造函数方法 constructor()。
类表达式
类表达式是定义类的另一种方法。类表达式可以命名或不命名。命名类表达式的名称是该类体的局部名称。
实例
let Runoob = class {
constructor(name, url) {
this.name = name;
this.url = url;
}
};
console.log(Runoob.name);
// output: "Runoob" // 命名类
let Runoob = class Runoob2 {
constructor(name, url) {
this.name = name;
this.url = url;
}
};
console.log(Runoob.name);
// 输出: "Runoob2"
构造方法
构造方法是一种特殊的方法:
- 构造方法名为 constructor()。
- 构造方法在创建新对象时会自动执行。
- 构造方法用于初始化对象属性。
- 如果不定义构造方法,JavaScript 会自动添加一个空的构造方法。
类的方法
我们使用关键字 class 创建一个类,可以添加一个 constructor() 方法,然后添加任意数量的方法。
constructor() { … }
method_1() { … }
method_2() { … }
method_3() { … }
}
以下实例我们创建一个 “age” 方法,用于返回网站年龄:
实例
constructor(name, year) {
this.name = name;
this.year = year;
}
age() {
let date = new Date();
return date.getFullYear() – this.year;
}
} let runoob = new Runoob("菜鸟教程", 2018);
document.getElementById("demo").innerHTML =
"菜鸟教程 " + runoob.age() + " 岁了。";
我们还可以向类的方法发送参数:
实例
constructor(name, year) {
this.name = name;
this.year = year;
}
age(x) {
return x – this.year;
}
} let date = new Date();
let year = date.getFullYear(); let runoob = new Runoob("菜鸟教程", 2020);
document.getElementById("demo").innerHTML=
"菜鸟教程 " + runoob.age(year) + " 岁了。";
严格模式 “use strict”
类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter 和 setter 都在严格模式下执行。
如果你没有遵循严格模式,则会出现错误:
实例
constructor(name, year) {
this.name = name;
this.year = year;
}
age() {
// date = new Date(); // 错误
let date = new Date(); // 正确
return date.getFullYear() – this.year;
}
}
下图实例使用类未声明的变量:
更多严格模式可以参考:JavaScript 严格模式(use strict)
Python 移除列表中重复的元素
最后更新于:2022-03-27 03:03:06
Python 移除列表中重复的元素
本章节我们将学习如何从列表中删除重复的元素。
知识点有:
-
Python 集合:集合(set)是一个无序的不重复元素序列。
-
Python 列表:列表是一种数据项构成的有限序列,即按照一定的线性顺序排列而成的数据项的集合,在这种数据结构上进行的基本操作包括对元素的的查找、插入和删除。
实例
print(list(set(list_1)))
执行以上代码输出结果为:
[1, 2, 4, 6]
在以上实例中,我们首先将列表转换为集合,然后再次将其转换为列表。集合中不能有重复元素,因此 set() 会删除重复的元素。
删除两个列表中重复的元素
在以下实例中,两个列表中同时存在的元素会被删除。
实例
list_2 = [7, 8, 2, 1]
print(list(set(list_1) ^ set(list_2)))
首先,使用 set() 将两个列表转换为两个集合,用于删除列表中的重复元素。
然后,使用 ^ 运算符得到两个列表的对称差。
执行以上代码输出结果为:
[4, 6, 7, 8]
首先,将两个列表转换为两个集合,以从每个列表中删除重复项。
然后,^ 得到两个列表的对称差(排除两个集合的重叠元素)。
Python3 数据类型转换
最后更新于:2022-03-27 03:03:04
Python3 数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。
Python 数据类型转换可以分为两种:
- 隐式类型转换 – 自动完成
- 显式类型转换 – 需要使用类型函数来转换
隐式类型转换
在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。
以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。
实例
num_int = 123
num_flo = 1.23
num_new = num_int + num_flo
print("datatype of num_int:",type(num_int))
print("datatype of num_flo:",type(num_flo))
print("Value of num_new:",num_new)
print("datatype of num_new:",type(num_new))
以上实例输出结果为:
num_int 数据类型为: <class 'int'> num_flo 数据类型为: <class 'float'> num_new: 值为: 124.23 num_new 数据类型为: <class 'float'>
代码解析:
- 实例中我们对两个不同数据类型的变量
num_int
和num_flo
进行相加运算,并存储在变量num_new
中。 - 然后查看三个变量的数据类型。
- 在输出结果中,我们看到
num_int
是整型(integer)
,num_flo
是浮点型(float)
。 - 同样,新的变量
num_new
是浮点型(float)
,这是因为 Python 会将较小的数据类型转换为较大的数据类型,以避免数据丢失。
我们再看一个实例,整型数据与字符串类型的数据进行相加:
实例
num_str = "456"
print("Data type of num_int:",type(num_int))
print("Data type of num_str:",type(num_str))
print(num_int+num_str)
以上实例输出结果为:
num_int 数据类型为: <class 'int'> num_str 数据类型为: <class 'str'> Traceback (most recent call last): File "/runoob-test/test.py", line 7, in <module> print(num_int+num_str) TypeError: unsupported operand type(s) for +: 'int' and 'str'
从输出中可以看出,整型和字符串类型运算结果会报错,输出 TypeError。 Python 在这种情况下无法使用隐式转换。
但是,Python 为这些类型的情况提供了一种解决方案,称为显式转换。
显式类型转换
在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。
int() 强制转换为整型:
实例
y = int(2.8) # y 输出结果为 2
z = int("3") # z 输出结果为 3
float() 强制转换为浮点型:
实例
y = float(2.8) # y 输出结果为 2.8
z = float("3") # z 输出结果为 3.0
w = float("4.2") # w 输出结果为 4.2
str() 强制转换为字符串类型:
实例
y = str(2) # y 输出结果为 ‘2’
z = str(3.0) # z 输出结果为 ‘3.0’
整型和字符串类型进行运算,就可以用强制类型转换来完成:
实例
num_str = "456"
print("num_int 数据类型为:",type(num_int))
print("类型转换前,num_str 数据类型为:",type(num_str))
num_str = int(num_str) # 强制转换为整型
print("类型转换后,num_str 数据类型为:",type(num_str))
num_sum = num_int + num_str
print("num_int 与 num_str 相加结果为:",num_sum)
print("sum 数据类型为:",type(num_sum))
以上实例输出结果为:
num_int 数据类型为: <class 'int'> 类型转换前,num_str 数据类型为: <class 'str'> 类型转换后,num_str 数据类型为: <class 'int'> num_int 与 num_str 相加结果为: 579 sum 数据类型为: <class 'int'>
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
将x转换为一个整数 |
|
将x转换到一个浮点数 |
|
创建一个复数 |
|
将对象 x 转换为字符串 |
|
将对象 x 转换为表达式字符串 |
|
用来计算在字符串中的有效Python表达式,并返回一个对象 |
|
将序列 s 转换为一个元组 |
|
将序列 s 转换为一个列表 |
|
转换为可变集合 |
|
创建一个字典。d 必须是一个 (key, value)元组序列。 |
|
转换为不可变集合 |
|
将一个整数转换为一个字符 |
|
将一个字符转换为它的整数值 |
|
将一个整数转换为一个十六进制字符串 |
|
将一个整数转换为一个八进制字符串 |
Vue3 创建项目
最后更新于:2022-03-27 03:03:02
Vue3 创建项目
在上一章节 Vue3 安装 我们使用了 vue init 命令创建过一个项目,本章节我们主要介绍 vue create 命令创建项目以及使用 vue ui 命令打开图形化的安装界面。
vue create 命令
vue create 命令创建项目语法格式如下:
vue create [options] <app-name>
创建一个由 vue-cli-service 提供支持的新项目:
options 选项可以是:
- -p, –preset <presetName>: 忽略提示符并使用已保存的或远程的预设选项
- -d, –default: 忽略提示符并使用默认预设选项
- -i, –inlinePreset <json>: 忽略提示符并使用内联的 JSON 字符串预设选项
- -m, –packageManager <command>: 在安装依赖时使用指定的 npm 客户端
- -r, –registry <url>: 在安装依赖时使用指定的 npm registry
- -g, –git [message]: 强制 / 跳过 git 初始化,并可选的指定初始化提交信息
- -n, –no-git: 跳过 git 初始化
- -f, –force: 覆写目标目录可能存在的配置
- -c, –clone: 使用 git clone 获取远程预设选项
- -x, –proxy: 使用指定的代理创建项目
- -b, –bare: 创建项目时省略默认组件中的新手指导信息
- -h, –help: 输出使用帮助信息
接下来我们创建 runoob-vue3-app 项目:
vue create runoob-vue3-app
执行以上命令会出现安装选项界面:
Vue CLI v4.4.6 ? Please pick a preset: (Use arrow keys) ❯ default (babel, eslint) Manually select features
按下回车键后就会进入安装,等候片刻即可完成安装。
安装完成后,我们进入项目目录:
cd runoob-vue3-app2
启动应用:
npm run serve
然后打开 http://localhost:8080/,就可以看到应用界面了:
vue ui 命令
除了使用 vue create 命令创建项目,我们还可以使用可视化创建工具来创建项目。
运行命令:
$ vue ui 🚀 Starting GUI... 🌠 Ready on http://localhost:8000 ...
执行以上命令,会在浏览器弹出一个项目管理的界面:
我们可以点击“创建”选项来创建一个项目,选择底部”在此创建项目”,页面上方也可以选择路径:
然后输入我们的项目名称,选择包管理工具为 npm,然后点击下一步:
配置选择默认即可:
接下来就等待完成安装,安装完成管理界面如下:
HTML 国家/地区参考手册
最后更新于:2022-03-27 03:02:56
HTML 国家/地区 参考手册
ISO 国家和地区代码
在 HTML 中,国家/地区代码可作为 lang 属性中语言代码的补充。
语言代码的前两个字符定义网页的语言(请参阅语言代码参考)。
最后两个字符定义国家/地区。
以下实例将中文指定为语言,将中国指定为国家:
…
</html>
以下实例将英语指定为语言,将美国指定为国家:
…
</html>
ISO 639-1 国家/地区代码
国家/地区 | ISO 代码 |
---|---|
AFGHANISTAN | AF |
ALBANIA | AL |
ALGERIA | DZ |
AMERICAN SAMOA | AS |
ANDORRA | AD |
ANGOLA | AO |
ANTARCTICA | AQ |
ANTIGUA AND BARBUDA | AG |
ARGENTINA | AR |
ARMENIA | AM |
ARUBA | AW |
AUSTRALIA | AU |
AUSTRIA | AT |
AZERBAIJAN | AZ |
BAHAMAS | BS |
BAHRAIN | BH |
BANGLADESH | BD |
BARBADOS | BB |
BELARUS | BY |
BELGIUM | BE |
BELIZE | BZ |
BENIN | BJ |
BERMUDA | BM |
BHUTAN | BT |
BOLIVIA | BO |
BOSNIA AND HERZEGOVINA | BA |
BOTSWANA | BW |
BOUVET ISLAND | BV |
BRAZIL | BR |
BRITISH INDIAN OCEAN TERRITORY | IO |
BRUNEI DARUSSALAM | BN |
BULGARIA | BG |
BURKINA FASO | BF |
BURUNDI | BI |
CAMBODIA | KH |
CAMEROON | CM |
CANADA | CA |
CAPE VERDE | CV |
CAYMAN ISLANDS | KY |
CENTRAL AFRICAN REPUBLIC | CF |
CHAD | TD |
CHILE | CL |
CHINA | CN |
CHRISTMAS ISLAND | CX |
COCOS (KEELING) ISLANDS | CC |
COLOMBIA | CO |
COMOROS | KM |
CONGO | CG |
CONGO, THE DEMOCRATIC REPUBLIC OF THE | CD |
COOK ISLANDS | CK |
COSTA RICA | CR |
CÔTE D’IVOIRE | CI |
CROATIA | HR |
CUBA | CU |
CYPRUS | CY |
CZECH REPUBLIC | CZ |
DENMARK | DK |
DJIBOUTI | DJ |
DOMINICA | DM |
DOMINICAN REPUBLIC | DO |
ECUADOR | EC |
EGYPT | EG |
EL SALVADOR | SV |
EQUATORIAL GUINEA | GQ |
ERITREA | ER |
ESTONIA | EE |
ETHIOPIA | ET |
FALKLAND ISLANDS (MALVINAS) | FK |
FAROE ISLANDS | FO |
FIJI | FJ |
FINLAND | FI |
FRANCE | FR |
FRENCH GUIANA | GF |
FRENCH POLYNESIA | PF |
FRENCH SOUTHERN TERRITORIES | TF |
GABON | GA |
GAMBIA | GM |
GEORGIA | GE |
GERMANY | DE |
GHANA | GH |
GIBRALTAR | GI |
GREECE | GR |
GREENLAND | GL |
GRENADA | GD |
GUADELOUPE | GP |
GUAM | GU |
GUATEMALA | GT |
GUINEA | GN |
GUINEA-BISSAU | GW |
GUYANA | GY |
HAITI | HT |
HEARD ISLAND AND MCDONALD ISLANDS | HM |
HONDURAS | HN |
HONG KONG | HK |
HUNGARY | HU |
ICELAND | IS |
INDIA | IN |
INDONESIA | ID |
IRAN, ISLAMIC REPUBLIC OF | IR |
IRAQ | IQ |
IRELAND | IE |
ISRAEL | IL |
ITALY | IT |
JAMAICA | JM |
JAPAN | JP |
JORDAN | JO |
KAZAKHSTAN | KZ |
KENYA | KE |
KIRIBATI | KI |
KOREA, DEMOCRATIC PEOPLE’S REPUBLIC OF | KP |
KOREA, REPUBLIC OF | KR |
KUWAIT | KW |
KYRGYZSTAN | KG |
LAO PEOPLE’S DEMOCRATIC REPUBLIC (LAOS) |
LA |
LATVIA | LV |
LEBANON | LB |
LESOTHO | LS |
LIBERIA | LR |
LIBYA, STATE OF | LY |
LIECHTENSTEIN | LI |
LITHUANIA | LT |
LUXEMBOURG | LU |
MACAO | MO |
MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF | MK |
MADAGASCAR | MG |
MALAWI | MW |
MALAYSIA | MY |
MALDIVES | MV |
MALI | ML |
MALTA | MT |
MARSHALL ISLANDS | MH |
MARTINIQUE | MQ |
MAURITANIA | MR |
MAURITIUS | MU |
MAYOTTE | YT |
MEXICO | MX |
MICRONESIA, FEDERATED STATES OF | FM |
MOLDOVA, REPUBLIC OF | MD |
MONACO | MC |
MONGOLIA | MN |
MONTENEGRO | ME |
MONTSERRAT | MS |
MOROCCO | MA |
MOZAMBIQUE | MZ |
MYANMAR | MM |
NAMIBIA | NA |
NAURU | NR |
NEPAL, FEDERAL DEMOCRATIC REPUBLIC OF | NP |
NETHERLANDS | NL |
NETHERLANDS ANTILLES | AN |
NEW CALEDONIA | NC |
NEW ZEALAND | NZ |
NICARAGUA | NI |
NIGER | NE |
NIGERIA | NG |
NIUE | NU |
NORFOLK ISLAND | NF |
NORTHERN MARIANA ISLANDS | MP |
NORWAY | NO |
OMAN | OM |
PAKISTAN | PK |
PALAU | PW |
PALESTINE, STATE OF | PS |
PANAMA | PA |
PAPUA NEW GUINEA | PG |
PARAGUAY | PY |
PERU | PE |
PHILIPPINES | PH |
PITCAIRN | PN |
POLAND | PL |
PORTUGAL | PT |
PUERTO RICO | PR |
QATAR | QA |
RÉUNION | RE |
ROMANIA | RO |
RUSSIAN FEDERATION | RU |
RWANDA | RW |
SAINT HELENA | SH |
SAINT KITTS AND NEVIS | KN |
SAINT LUCIA | LC |
SAINT PIERRE AND MIQUELON | PM |
SAINT VINCENT AND THE GRENADINES | VC |
SAMOA | WS |
SAN MARINO | SM |
SAO TOME AND PRINCIPE | ST |
SAUDI ARABIA | SA |
SENEGAL | SN |
SERBIA | RS |
SEYCHELLES | SC |
SIERRA LEONE | SL |
SINGAPORE | SG |
SLOVAKIA | SK |
SLOVENIA | SI |
SOLOMON ISLANDS | SB |
SOMALIA | SO |
SOUTH AFRICA | ZA |
SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS | GS |
SOUTH SUDAN | SS |
SPAIN | ES |
SRI LANKA | LK |
SUDAN | SD |
SURINAME | SR |
SVALBARD AND JAN MAYEN | SJ |
SWAZILAND | SZ |
SWEDEN | SE |
SWITZERLAND | CH |
SYRIAN ARAB REPUBLIC | SY |
TAIWAN,CHINA | TW |
TAJIKISTAN | TJ |
TANZANIA, UNITED REPUBLIC OF | TZ |
THAILAND | TH |
TIMOR-LESTE | TL |
TOGO | TG |
TOKELAU | TK |
TONGA | TO |
TRINIDAD AND TOBAGO | TT |
TUNISIA | TN |
TURKEY | TR |
TURKMENISTAN | TM |
TURKS AND CAICOS ISLANDS | TC |
TUVALU | TV |
UGANDA | UG |
UKRAINE | UA |
UNITED ARAB EMIRATES | AE |
UNITED KINGDOM | GB |
UNITED STATES | US |
UNITED STATES MINOR OUTLYING ISLANDS | UM |
URUGUAY | UY |
UZBEKISTAN | UZ |
VANUATU | VU |
VENEZUELA | VE |
VIET NAM | VN |
VIRGIN ISLANDS, BRITISH | VG |
VIRGIN ISLANDS, U.S. | VI |
WALLIS AND FUTUNA | WF |
WESTERN SAHARA | EH |
YEMEN | YE |
ZAMBIA | ZM |
ZIMBABWE | ZW |
HTML <template> 标签
最后更新于:2022-03-27 03:02:54
HTML <template> 标签
实例
使用 <template> 标签在页面加载时该标签中的内容不会显示,加载后可以使用 JavaScript 来显示它:
<h2>logo</h2>
<img src="https://static.runoob.com/images/runoob-logo.png" >
</template> <script>
function showContent() {
var temp = document.getElementsByTagName("template")[0];
var clon = temp.content.cloneNode(true);
document.body.appendChild(clon);
}
</script>
浏览器支持
表格中的数字表示支持该元素的第一个浏览器的版本号。
元素 | |||||
---|---|---|---|---|---|
<template> | 26.0 | 13.0 | 22.0 | 8.0 | 15.0 |
标签定义及使用说明
<template> 标签定义在页面加载时隐藏的一些内容,该标签中的内容可以稍后使用 JavaScript 呈现。
如果您有一些需要重复使用的 HTML 代码,则可以使用 <template>
设置为公用的模板。
更多实例
实例
实例中的每个数组元素都使用一个新的 div 元素来填充网页。每个 div 元素的 HTML 代码都在 template 元素内::
<div class="myClass">我喜欢: </div>
</template> <script>
var myArr = ["Google", "Runoob", "Taobao", "Wiki", "Zhihu", "Baidu"];
function showContent() {
var temp, item, a, i;
temp = document.getElementsByTagName("template")[0];
item = temp.content.querySelector("div");
for (i = 0; i < myArr.length; i++) {
a = document.importNode(item, true);
a.textContent += myArr[i];
document.body.appendChild(a);
}
}
</script>
实例
查看浏览器是否支持 template 标签:
document.write("您的浏览器支持 template 标签!");
} else {
document.write("您的浏览器不支持 template 标签!");
}
全局属性
<time> 标签支持 HTML 的全局属性。
Python with 关键字
最后更新于:2022-03-27 03:02:51
Python with 关键字
Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。
with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。
在处理文件对象时使用 with 关键字是一种很好的做法。
我们可以看下以下几种代码实例:
不使用 with,也不使用 try…except…finally
实例
file.write(‘hello world !’)
file.close()
以上代码如果在调用 write 的过程中,出现了异常,则 close 方法将无法被执行,因此资源就会一直被该程序占用而无法被释放。
接下来我们呢可以使用 try…except…finally 来改进代码:
实例
try:
file.write(‘hello world’)
finally:
file.close()
以上代码我们对可能发生异常的代码处进行 try 捕获,发生异常时执行 except 代码块,finally 代码块是无论什么情况都会执行,所以文件会被关闭,不会因为执行异常而占用资源。
使用 with 关键字:
实例
file.write(‘hello world !’)
使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。
我们可以在执行 with 关键字后检验文件是否关闭:
实例
… read_data = f.read()
>>> # 查看文件是否关闭
>>> f.closed
True
with 语句实现原理建立在上下文管理器之上。
上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。
使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。
这个概念类似于 try…finally 块的使用。
实例
my_file.write(‘hello world!’)
以上实例将 hello world! 写到 ./test_runoob.txt 文件上。
在文件对象中定义了 __enter__ 和 __exit__ 方法,即文件对象也实现了上下文管理器,首先调用 __enter__ 方法,然后执行 with 语句中的代码,最后调用 __exit__ 方法。 即使出现错误,也会调用 __exit__ 方法,也就是会关闭文件流。
AJAX JSON 实例
最后更新于:2022-03-27 03:02:49
AJAX JSON 实例
AJAX 可用来与 JSON 文件进行交互式通信。
AJAX JSON 实例
下面的例子将演示网页如何使用 AJAX 来读取来自 JSON 文件的信息:
实例解析 – loadXMLDoc() 函数
当用户点击上面的“获取课程数据”这个按钮,就会执行 loadXMLDoc() 函数。
loadXMLDoc() 函数创建 XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。
当服务器响应就绪时,我们就使用 JSON.parse() 方法将数据转换为 JavaScript 对象。:
异步加载 JSON 文档
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var myArr = JSON.parse(this.responseText);
myFunction(myArr)
}
}
xmlhttp.open("GET","/try/ajax/json_ajax.json",true);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send();
}
function myFunction(arr) {
var out = "";
var i;
for(i = 0; i < arr.length; i++) {
out += ‘<a href="‘ + arr[i].url + ‘">‘ +
arr[i].title + ‘</a><br>‘;
}
document.getElementById("myDiv").innerHTML=out;
}
AJAX 服务器页面
上面这个例子中使用的服务器页面实际上是一个名为 “json_ajax.json” JSON 文件。
JSON 数据如下:
json_ajax.jso 文件:
{
"title": "JavaScript 教程",
"url": "https://docs.gechiui.com/w3school/js/"
},
{
"title": "HTML 教程",
"url": "https://docs.gechiui.com/w3school/html/"
},
{
"title": "CSS 教程",
"url": "https://docs.gechiui.com/w3school/css/"
}
]
发送 JSON 数据:
xmlhttp.send(JSON.stringify({ "email": "admin@runoob.com", "response": { "name": "runoob" } }));
HTML source srcset 属性
最后更新于:2022-03-27 03:02:47
HTML <source> srcset 属性
实例
在 <picture> 标签中使用 <source> 来设置不同屏幕显示的图片:
<source media="(min-width:650px)" srcset="https://static.runoob.com/images/runoob-logo.png">
<source media="(min-width:465px)" srcset="https://static.runoob.com/images/code-icon-script.png">
<img src="https://static.runoob.com/images/mix/hjkg_icon.png" style="width:auto;">
</picture>
浏览器支持
表格中的数字表示支持该属性的第一个浏览器版本号。
属性 | |||||
---|---|---|---|---|---|
srcset | 38.0 | 13.0 | 38.0 | 9.1 | 25.0 |
定义和用法
srcset 属性用于不同情况下显示的图片 URL。
<source> 应用于 <picture> 标签时需要使用到该属性。
HTML 4.01 与 HTML5之间的差异
<source> 标签是 HTML5 中的新标签。
语法
<source srcset="URL">
属性值
值 | 描述 |
---|---|
URL | 规定媒体文件的 URL。
可能的值:
|
React componentWillUnmount() 方法
最后更新于:2022-03-27 03:02:45
React componentWillUnmount() 方法
componentWillUnmount() 方法格式如下:
componentWillUnmount()
componentWillUnmount() 方法在组件卸载及销毁之前直接调用。
componentWillUnmount() 方法中不应调用 setState(),因为该组件将永远不会重新渲染。组件实例卸载后,将永远不会再挂载它。
以下实例中 componentWillUnmount() 方法会在组件即将从 DOM 中移除时调用:
实例
constructor(props) {
super(props);
this.state = {show: true};
}
delHeader = () => {
this.setState({show: false});
}
render() {
let myheader;
if (this.state.show) {
myheader = <Child />;
};
return (
<div>
{myheader}
<button type="button" onClick={this.delHeader}>删除标题组建</button>
</div>
);
}
} class Child extends React.Component {
componentWillUnmount() {
alert("标题组件即将卸载。");
}
render() {
return (
<h1>Hello Runoob!</h1>
);
}
} ReactDOM.render(<Container />, document.getElementById(‘root‘));