<!DOCTYPE html><html><head><meta charset="utf-8"><title>显均学苑</title></head><body><h1>我的第一个标题</h1><p>我的第一个段落。</p>......</body></html>
对于中文网页需要使用 <meta charset="utf-8"> 声明编码,否则会出现乱码。有些浏览器(如 360 浏览器)会设置 GBK 为默认编码,则你需要设置为 <meta charset="gbk">。
xxxxxxxxxx<h1>最大的标题</h1><h2> . . . </h2><h3> . . . </h3><h4> . . . </h4><h5> . . . </h5><h6>最小的标题</h6><p>这是一个段落。</p><br/> (换行)<hr> (水平线)<!-- 这是注释 --> (英文半角下的一个空格)
链接的地址在 href 属性中指定
xxxxxxxxxx普通的链接:<a href="http://www.example.com/">链接文本</a>图像链接: <a href="http://www.example.com/"><img src="URL" alt="替换文本"></a>邮件链接: <a href="mailto:webmaster@example.com">发送e-mail</a>书签:<a id="tips">提示部分</a><a href="#tips">跳到提示部分</a>
title 鼠标悬停在超链接上的时候,显示的文字。
去掉下划线 text-decoration:none;
去掉颜色 color:#333;
xxxxxxxxxx<img src="xxxx.jpg" alt="图片加载失败时的文本" width="100" height="60" />
title 添加描述性文字
alt 不到图像或图片加载失败,提供的文字说明。
loading 加载方式
align 指定图像相对于周围上下文的对齐方式。
注意不同浏览器和同一版本浏览器的不同版本对align的处理方式不一致,如下为Chrome浏览器处理方式。
left:左浮动,等价于float: left与vertical-align: top
注意:float浮动使元素呈现类似块级元素,而vertical-align对行内元素生效,因此vertical-align: top实际不生效
right:右浮动,等价于float: right与vertical-align: top
middle:中央对齐,等价于vertical-align: -moz-middle-with-baseline
top:顶部对齐,等价于vertical-align: top
bottom:底部对齐,等价于vertical-align: baseline
border 指定图像周围边框宽度。等价于border: 2px solid #000
hspace/vspace
hspace指定图片左右外边距。`hspace=10等价于margin: 0 10px
vspace指定图片上下外边距。`vspace=10等价于margin: 10px
xxxxxxxxxx<form action="URL" method="post/get"><input type="text" name="email" size="40" maxlength="50"><input type="password"><input type="checkbox" checked="checked" name="a"><input type="radio" checked="checked" name="b"><input type="submit" value="提交"><input type="reset" value="重置"><input type="hidden"><select><option>苹果</option><option selected="selected">香蕉</option><option>樱桃</option></select><textarea name="comment" rows="60" cols="20"></textarea></form>
<label> 标签为 input 元素定义标注(标记)。
label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
定义可点击的按钮(通常与 JavaScript 一起使用来启动脚本)。
xxxxxxxxxx<button>登录</button>
xxxxxxxxxx<table border="1"><caption>表格标题</caption><tr><th>表格标题</th><th>表格标题</th></tr><tr><td>表格数据</td><td>表格数据</td></tr></table>
xxxxxxxxxx<tr><th>姓名</th><th colspan="2">电话</th></tr>
table 的属性如:border、width、height 等,建议写在 css 样式中。<caption> 元素可以设置表格的标题。
xxxxxxxxxx<table border="1" cellpadding="10">...</table>
<thead><tbody><tfoot> 把表格分成多个逻辑区域,以便之后可以用 CSS 更好的控制表现。
xxxxxxxxxx<!DOCTYPE HTML><html><head><style type="text/css">thead {color:green}tbody {color:blue;height:50px}tfoot {color:red}</style></head><body><table border="1"><thead><tr><th>Month</th><th>Savings</th></tr></thead><tbody><tr><td>January</td><td>$100</td></tr><tr><td>February</td><td>$80</td></tr></tbody><tfoot><tr><td>Sum</td><td>$180</td></tr></tfoot></table></body></html>
xxxxxxxxxx<!--无序列表--><ul><li>项目</li><li>项目</li></ul><!--有序列表--><ol><li>第一项</li><li>第二项</li></ol><!--自定义列表--><dl><dt>项目 1</dt><dd>描述项目 1</dd><dt>项目 2</dt><dd>描述项目 2</dd></dl>
xxxxxxxxxx<iframe src="demo_iframe.htm"></iframe>
xxxxxxxxxx<b>粗体文本</b><code>计算机代码</code><em>强调文本</em><i>斜体文本</i><kbd>键盘输入</kbd><pre>预格式化文本</pre><small>更小的文本</small><strong>重要的文本</strong><abbr> (缩写)<address> (联系信息)<bdo> (文字方向)<blockquote> (从另一个源引用的部分)<cite> (工作的名称)<del> (删除的文本)<ins> (插入的文本)<sub> (下标文本)<sup> (上标文本)
xxxxxxxxxx<style type="text/css">h1 {color:red;}p {color:blue;}</style><div>文档中的块级元素</div><span>文档中的内联元素</span>
input 类型是 HTML5 中的新类型:color、date、datetime、datetime-local、month、week、time、email、number、range、search、tel 和 url。
语法:<input type="value">
| 值 | 描述 |
|---|---|
| button | 定义可点击的按钮(通常与 JavaScript 一起使用来启动脚本)。 |
| checkbox | 定义复选框。 |
| color | 定义拾色器。 |
| date | 定义 date 控件(包括年、月、日,不包括时间)。 |
| datetime | 定义 date 和 time 控件(包括年、月、日、时、分、秒、几分之一秒,基于 UTC 时区)。 |
| datetime-local | 定义 date 和 time 控件(包括年、月、日、时、分、秒、几分之一秒,不带时区)。 |
| 定义用于 e-mail 地址的字段。 | |
| file | 定义文件选择字段和 "浏览..." 按钮,供文件上传。 |
| hidden | 定义隐藏输入字段。 |
| image | 定义图像作为提交按钮。 |
| month | 定义 month 和 year 控件(不带时区)。 |
| number | 定义用于输入数字的字段。 |
| password | 定义密码字段(字段中的字符会被遮蔽)。 |
| radio | 定义单选按钮。 |
| range | 定义用于精确值不重要的输入数字的控件(比如 slider 控件)。 |
| reset | 定义重置按钮(重置所有的表单值为默认值)。 |
| search | 定义用于输入搜索字符串的文本字段。 |
| submit | 定义提交按钮。 |
| tel | 定义用于输入电话号码的字段。 |
| text | 默认。定义一个单行的文本字段(默认宽度为 20 个字符)。 |
| time | 定义用于输入时间的控件(不带时区)。 |
| url | 定义用于输入 URL 的字段。 |
| week | 定义 week 和 year 控件(不带时区)。 |
xxxxxxxxxx<!doctype html><html><head><meta charset="utf-8"><title>test1</title></head><body><table width="500px" height="300px" align="center" cellpadding="0" cellspacing="1" bgcolor="black"><tr align="right" bgcolor="white"><td width="100px" height="50px">刘德华</td><td align="center">张学友</td></tr><tr valign="top" bgcolor="white"><td>郭富城</td><td valign="bottom">黎明</td></tr></table></body></html>
xxxxxxxxxx<!doctype html><html><head><meta charset="utf-8"><title>test2</title><style>table{border-collapse:collapse;border-spacing:0;border:1px solid;}td{border:1px solid;}</style></head><body><table width="500px" height="300px" align="center"><tr align="right"><td width="100px" height="50px">刘德华</td><td align="center">张学友</td></tr><tr valign="top"><td>郭富城</td><td valign="bottom">黎明</td></tr></table></body></html>
重点:border-collapse:collapse;
支持汉字和自适应屏幕
xxxxxxxxxx<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/></head>
该input标签后添加autofocus="autofocus"即可autofocus="autofocus"
xxxxxxxxxx<a href="http://www.web.com">返回首页</a><a href="/">返回首页</a><a href="javascript:history.go(-1)">返回上一页</a>
制作一个尺寸16x16大小的图;
方法1
把favicon.ico文件上传到网站的根目录下的Public/img/favicon.ico,并把网站的首页文件的源代码
之间加上一句:方法2:
直接在站点根目录下放入名为:favicon.ico 的图标文件(必须要为 ICO 文件,BMP 及其他格式的图片文件不行)。还有将 favicon.ico 中的 favicon 命名为你网站域名的名称也可以。
=====================================END===============================
在HTML元素中使用style属性引入CSS样式。实际在写页面时不提倡使用,在测试的时候可以使用。
xxxxxxxxxx<h1 style="color:blue;text-align:center;">这是行内样式</h1>
在HTML文档头部 <head> 区域使用<style> 元素 来包含CSS。
xxxxxxxxxx<head><style type="text/css">h3{color:red;}</style></head>
CSS代码保存在扩展名为.css的样式表中 HTML文件引用扩展名为.css的样式表,有两种方式:链接式、导入式。
xxxxxxxxxx<link type="text/css" rel="styleSheet" href="CSS文件路径" />
xxxxxxxxxx```<style type="text/css">@import url("css文件路径");</style>
实例:
xxxxxxxxxx<head><meta charset="utf-8" /><title>实例</title><!--链接式:推荐使用--><link type="text/css" rel="stylesheet" href="css/style.css" /><!--导入式--><style type="text/css">@import url("css/style.css");</style></head>
xxxxxxxxxx* <link>1、属于XHTML2、优先加载CSS文件到页面* @import1、属于CSS2.12、先加载HTML结构再加载CSS文件。
行内样式>内部样式>外部样式(后两者是就近原则)
CSS 有几种表示长度的不同单位。
许多 CSS 属性接受“长度”值,诸如 width、margin、padding、font-size 等。
长度是一个后面跟着长度单位的数字,诸如 10px、2em 等。
长度单位有两种类型:绝对单位和相对单位。
像素(px)是相对于观看设备的。对于低 dpi 的设备,1px 是显示器的一个设备像素(点)。对于打印机和高分辨率屏幕,1px 表示多个设备像素。
xxxxxxxxxxdisplay:bock; /* 块级元素 */display:inline-bock; /* 行内块 */display:inline; /* 行内元素 */
如果 display 设置为 none,则该框及其所有内容就不再显示,不占用文档中的空间。
xxxxxxxxxxp { color:red; text-align: center; }h1{ color:blue; }
xxxxxxxxxx<div class="title">这是类选择器</div>.title{ color:red; }
类名可以由数字、字典、下划线和横线,但不能以数字开头。
xxxxxxxxxx<div id="title">这是ID选择器</div>#title{ color:red; }
选择器之间用逗号隔开;表示同时选中多个选择器对应的元素,
xxxxxxxxxxh1,p,span{ color:red; }
选择器之间不能有空格,要紧挨在一起
xxxxxxxxxx<span class="title">子集选择器</span>span.title{ color:blue; }
根据元素中的属性或属性值来选取指定元素。
xxxxxxxxxx[属性名]选取含有指定属性的元素[属性名=“属性值”]选取含指定属性值的元素[属性名^=``"属性值"``] 选取属性值以指定内容开头的元素[属性名$=``"属性值"``] 选取属性值以指定内容结尾的元素[属性名*=``"属性值"``] 选取属性值包含指定内容的元素
xxxxxxxxxx<div><div name="user_one">1</div><div name="user_two">2</div><div name="user_three">3</div></div>div[name='user_one']{ color:blue; }
伪类表示元素的一种特殊状态
作用:用来选中页面中所有的元素
语法:*{ }
xxxxxxxxxx*[title] { color:red; } /* 把包含标题为title的所有元素变为红色 */
+相邻选择器
作用:选中一个元素后紧挨着的指定的兄弟元素
语法:前一个+后一个(作用在后一个)
~兄弟选择器
作用:选中后边所有的制定兄弟元素
语法:前一个~后边所有
xxxxxxxxxx<div><p>1</p><p>2</p><span>SPAN标签</span><p>3</p><p>4</p><p>5</p></div>
xxxxxxxxxxspan+p{ color:blue; } /* 作用在3上,如果span后边第一个不是p标签,则选择器不起作用。 */span~p{ color:red; } /* 作用在3、4、5上*/
作用:选中指定元素的指定后代元素
语法:祖先元素 后代元素{ }
xxxxxxxxxxdiv span{ color:blue; }
作用:选中指定父元素的子元素
语法:父元素 > 子元素
xxxxxxxxxxul>li{ color:pink; }
xxxxxxxxxx/* 选择第一个li */.list li:first-child{color: aqua;}/* nth-child(3) 序号从1开始计数*/.list li:nth-child(3){color: brown;}/* nth-of-type(5) 序号从1开始计数*/.list li:nth-of-type(5){color: blue;}/* 选择最后一个li */.list li:last-child{color: blueviolet;}
:nth-child() 选择器
匹配属于其父元素的第 N 个子元素,不论元素的类型,n 可以是数字、关键词或公式。
:nth-of-type(n)
匹配属于父元素的特定类型的第N个子元素,元素类型没有限制;n可以是数字、关键词或公式。
odd 、 even (选择奇数 、偶数)
::first-line 伪元素用于向文本的首行添加特殊样式。
::first-line 伪元素只能应用于块级元素。
xxxxxxxxxxp::first-line {color: #ff0000;font-variant: small-caps;}
::first-letter 伪元素用于向文本的首字母添加特殊样式。
xxxxxxxxxxp::first-letter {color: #ff0000;font-size: xx-large;}
::before 伪元素可用于在元素内容之前插入一些内容。
<h1> 元素的内容之前插入一幅图像
xxxxxxxxxxh1::before {content: url(smiley.gif);}
::after 伪元素可用于在元素内容之后插入一些内容。
::selection 伪元素匹配用户选择的元素部分。
以下 CSS 属性可以应用于 ::selection:
color
background
cursor
outline
所选文本在黄色背景上显示为红色
xxxxxxxxxx::selection {color: red;background: yellow;}
div、h1 或 p 元素常常被称为块级元素。这意味着这些元素显示为一块内容,即“块框”。与之相反,span 和 strong 等元素称为“行内元素”,这是因为它们的内容显示在行中,即“行内框”。
CSS 有三种基本的定位机制:普通流、浮动和绝对定位。
除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。
块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。
行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。
static 元素框正常生成。
relative 相对定位
元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
xxxxxxxxxx.myleft{position:relative;left:20px}
absolute 绝对定位
元素框从文档流完全删除,并相对于其包含块定位。
fixed 固定定位
元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
注意:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。
在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。
xxxxxxxxxxul li{list-style:none;}或者{list-style-type:none;}
<a>标签去掉下划线xxxxxxxxxxa{text-decoration:none; color:#333; } /*去掉下划线和颜色*/a:link{text-decoration:none; } /* 指正常的未被访问过的链接*/a:visited{text-decoration:none; } /*指已经访问过的链接*/a:hover{text-decoration:none; } /*指鼠标在链接*/a:active{text-decoration:none; } /* 指正在点的链接*/
xxxxxxxxxxfont-size:20px;font-weight: 700;letter-spacing:2px;letter-spacing:-2px; //字间距
(1) inline-block
xxxxxxxxxxtext-align:center; line-height:50px;
(2) block
xxxxxxxxxxmargin:auto;
xxxxxxxxxxinput{border:0.5px solid #378888;width:300px;height:30px;border-radius:10px;border: none; 可以取消元素的边框outline: none; 可以取消元素被点击时显示的高亮颜色}
xxxxxxxxxx$("#test").attr({"disabled": "disabled"}); //禁用input按钮$("#test").removeAttr('disabled'); //启用input按钮
xxxxxxxxxxinput[type="checkbox"]{display: inline-block; // 设置为 行内块 就能改变大小了width: 30px;height: 30px;-webkit-appearance: none; // 改变元素外观-moz-appearance: none; // 改变元素外观appearance: none; // 改变元素外观background: #fff;border-radius: 3px;border: 1px solid #888;}input[type="checkbox"]:checked{ // 复选框选中的样式 使用带有对号的 背景图片打底background: url("images/checkbox-checked.png") no-repeat;background-size: 100% 100%;border: none;}
xxxxxxxxxxposition: relative;bottom: 0;width:100%;
position 属性规定应用于元素的定位方法的类型
有五个不同的位置值:
static (静态)
静态定位的元素不受 top、bottom、left 和 right 属性的影响。
元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位。
relative
元素相对于其正常位置进行定位。
设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。
fixed
元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。
固定定位的元素不会在页面中通常应放置的位置上留出空隙。
absolute
元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。
然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。
注意:“被定位的”元素是其位置除 static 以外的任何元素。
sticky
元素根据用户的滚动位置进行定位。
粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed)。
注意:Internet Explorer、Edge 15 以及更早的版本不支持粘性定位。 Safari 需要 -webkit- 前缀(请参见下面的实例)。您还必须至少指定 top、right、bottom 或 left 之一,以便粘性定位起作用。
在此例中,在到达其滚动位置时,sticky 元素将停留在页面顶部(top: 0)。
xxxxxxxxxx.bodystyle::before{content: " ";position: fixed;z-index: -1;top: 0;right: 0;bottom: 0;left: 0;background-image: url(bglog.png);background-repeat: repeat;opacity: 0.1;}
xxxxxxxxxx$("#button").attr("disabled","disabled"); 禁用$("#button").removeAttr("disabled"); 开启
xxxxxxxxxx$('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id').next() 当前元素之后内第一个兄弟节点$('#id').nextAll() 当前元素之后所有的兄弟节点parent() 方法返回被选元素的直接父元素parents() 方法返回被选元素的所有祖先元素。children(expr).返回所有子节点,这个方法只会返回直接的孩子节点,不会返回所有的子孙节点find(expr)
children(selector) 方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈),参数可选
find(selector)方法是返回匹配元素集合中每个元素的后代。参数是必选的
xxxxxxxxxx$(this).siblings(".option").children("input").prop("checked",false); //清除其它选项$(this).find("input").prop("checked",true)
选中与取消
xxxxxxxxxxif($tmp.is(":checked")){$tmp.prop("checked",false);}else{$tmp.prop("checked",true);};
xxxxxxxxxx方法一(建议):if ($("#checkbox-id").get(0).checked) {// do something}if ($("#checkbox-id")[0].checked) {// do something}方法二(建议):if($('#checkbox-id').is(':checked')) {// do something}方法三(可能无效):if ($('#checkbox-id').attr('checked')) {// do something}方法四:if ($('#checkbox-id').prop('checked')) {// do something}
xxxxxxxxxx.login{display:block;position: absolute;transform:translate(-50%,-61.8%);left:50%;top:50%;width:450px;border-radius:8px;background:rgb(255,255,255,0.9); // 白色背景,不透明90%}
xxxxxxxxxx{width:450px;height:400px;position : fixed/absolute;left : 50%;top : 50%;transform: translate(-50%, -50%);}
=========================END===============================
在 HTML5 中,不必在 <script>标签中使用 type="text/javascript"。JavaScript 是 HTML5 以及所有现代浏览器中的默认脚本语言!
xxxxxxxxxx// 样式<script src="网址路径/文件名.js"></script>// 引用百度CDN<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">
这两个版本都可以从官网 jQuery.com 下载。
xxxxxxxxxx<head><script src="./js/jquery-3.6.0.min.js"></script></head>
xxxxxxxxxx<script type="text/javascript">自己的js代码</script>
独立文件中使用 jQuery 函数
如果您的网站包含许多页面,并且您希望您的 jQuery 函数易于维护,那么请把您的 jQuery 函数放到独立的 .js 文件中。
xxxxxxxxxx<script src="./js/my_jquery_functions.js"></script>
xxxxxxxxxx<input type="button" value="行内引入方式" onclick="javascript:alert('我是行内引入方式');" />
jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作。
基础语法: $(*selector*).*action*()
xxxxxxxxxx$(this).hide() // 隐藏当前元素$("p").hide() // 隐藏所有 <p> 元素$("#XXX").click(function(){ // js代码 }) // ID为XXX元素,点击事件
jQuery 使用的语法是 XPath 与 CSS 选择器语法的组合。
| 选择器 | 语法 | 作用 |
|---|---|---|
| id选择器 | $("#test") | 根据id匹配一个元素 |
| class类选择器 | $(".test") | 根据类class匹配元素 |
| 标签选择器 | $("p") | 根据元素名称(标签)匹配所有元素 |
| 所有元素 | $("*") | 匹配所有元素 |
| 并集 | $("A,B") | A元素和B元素 |
| 交集 | $("AB") | A元素中的B元素 |
xxxxxxxxxx$("p").hide();$("button").click(function(){ // 代码 });$("#test").hide()$(".test").hide()*{color:#CCC;}
| 选择器 | 语法 | 描述 |
|---|---|---|
| 后代选择 | $(A B) | A下的所有B(包括B的子级) |
| 子选择 | $(A>B) | A下的所有B(不包括B的子级) |
| 兄弟 | $(A+B) | A相邻的下一个B |
| 兄弟 | $(A~B) | A相邻的后面的所有B |
| 兄弟 | $(A).siblings() | A所有的兄弟 |
A下的所有B(包括B的子级),可以用find()代替它。
xxxxxxxxxx$(A B)$(“ul li”)相当于$(“ul”).find(“li);
指定元素的直接后代元素,即子元素,可以用children()代替它。。
xxxxxxxxxx$(A>B)$(“body>div”)相当于$(“body”).children(“div”);
紧接在A元素后的B元素,可以用next()替代它。
xxxxxxxxxx$(A+B)$(“a+ul”)相当于$(“a”).next();
一般兄弟选择器 $("A ~ B"),选取A元素之后的所有兄弟元素,可以用nextAll()代替它。
xxxxxxxxxx$(A~B)$(“a~span”)相当于$(“a”).nextAll("span");
以 “:” 开头进行过滤
| 语法 | 描述 | 例子 |
|---|---|---|
| first()或 :first | 选取第一个元素 | $("#test:first").css("color","red"); |
| last()或 :last | 选取最后一个元素 | $("#test:last").css("color","red"); |
| :not(selector) | 不包括指定内容的元素 | $("p:not('#one')").css("color","red"); |
| :even | 选取所有索引为偶数的元素,索引从0开始 | $("tr:even").css("color","red"); |
| :odd | 选取所有索引为奇数的元素,索引从0开始 | $("tr:odd").css("color","red"); |
| :eq(index) | 选取索引等于index的元素,索引从0开始 | $("li:eq(2)").css("color","red"); |
| :gt(index) | 选取索引大于index的元素,索引从0开始 | |
| :lt(index) | 选取索引小于index的元素,索引从0开始 | |
| :header | 选取索引的标题标签 |
| 语法 | 描述 |
|---|---|
| Element[attribute] | 选取拥有此属性的选择器 |
| Element[attribute=value] | 选取指定属性值为value的元素 |
| Element[attribute!=value] | 选取指定属性值不等于value的元素 |
| Element[attribute^=value] | 选取指定属性值以value开始的元素 |
| Element[attribute$=value] | 选取指定属性值以value结束的元素 |
| Element[attribute*=value] | 选取指定属性值中含有value的元素 |
:input 选择由input生成的表单控件
:text 选择单行文本框
:password 选择密码框
:radio 单选按钮
:checkbox 复选按钮
表单对象属性过滤选择器
| 选择器 | 语法 |
|---|---|
| 可用元素 | $("A:enabled") |
| 不可用元素 | $("A:disabled") |
| 单选、复选框被选中的元素 | $("A:checked") |
| 下拉框被选中的元素 | $("A:selected") |
| 语法 | 描述 |
|---|---|
| $("*") | 选取所有元素 |
| $(this) | 选取当前 HTML 元素 |
| $("p.intro") | 选取 class 为 intro 的 元素 |
| $("p:first") | 选取第一个 元素 |
| $("ul li:first") | 选取第一个
|
| $("ul li:first-child") | 选取每个
|
| $("[href]") | 选取带有 href 属性的元素 |
| $("a[target='_blank']") | 选取所有 target 属性值等于 "_blank" 的 元素 |
| $("a[target!='_blank']") | 选取所有 target 属性值不等于 "_blank" 的 元素 |
| $(":button") | 选取所有 type="button" 的 元素 和 |
| $("tr:even") | 选取偶数位置的 |
| $("tr:odd") | 选取奇数位置的 |
| $("h1,div,p") | 所有 、元素 |
| 鼠标事件 | 键盘事件 | 表单事件 | 文档/窗口事件 |
|---|---|---|---|
| click 单击 | keypress | submit | load |
| dblclick 双击 | keydown | change | resize |
| mouseenter 鼠标指针进入 | keyup | focus 获得焦点 | scroll |
| mouseleave 鼠标指针离开 | blur 失去焦点 | unload | |
| hover 悬停 | |||
| mousedown 按下鼠标按键时 | |||
| mouseup 松开鼠标按钮 |
xxxxxxxxxx$("p").click(function(){// 动作触发后执行的代码!!});
xxxxxxxxxx$(selector).hide(speed,callback); // 隐藏$(selector).show(speed,callback); // 显示
toggle()
使用 toggle() 方法来切换 hide() 和 show() 方法。
jQuery 拥有下面四种 fade 方法:
fadeIn(),用于淡入已隐藏的元素。
xxxxxxxxxx$(selector).fadeIn(speed,callback);
fadeOut(),用于淡出可见元素。
xxxxxxxxxx$(selector).fadeOut(speed,callback);
fadeToggle(),在 fadeIn() 与 fadeOut() 方法之间进行切换
xxxxxxxxxx$(selector).fadeToggle(speed,callback);
fadeTo(),允许渐变为给定的不透明度(值介于 0 与 1 之间)。
xxxxxxxxxx$(selector).fadeTo(speed,opacity,callback);// 例如:$("#div2").fadeTo("slow",0.4);
xxxxxxxxxx// 获取$("#test").text();$("#test").html();$("#test").val();$("#w3s").attr("href");// 设置$("#test1").text("Hello world!");$("#test2").html("<b>Hello world!</b>");$("#test3").val("Dolly Duck");$("#w3s").attr("href","http://www.w3school.com.cn/jquery");$("#w3s").attr({"href" : "http://www.w3school.com.cn/jquery","title" : "W3School jQuery Tutorial"});
xxxxxxxxxx$("p").append("Some appended text.");$("p").append("Some appended text.");$("img").after("Some text after");$("img").before("Some text before");$("#div1").remove();$("#div1").empty();// 过滤删除$("p").remove(".italic");// 通过参数接收无限数量的新元素function appendText(){var txt1="<p>Text.</p>"; // 以 HTML 创建新元素var txt2=$("<p></p>").text("Text."); // 以 jQuery 创建新元素var txt3=document.createElement("p"); // 以 DOM 创建新元素txt3.innerHTML="Text.";$("p").append(txt1,txt2,txt3); // 追加新元素}function afterText(){var txt1="<b>I </b>"; // 以 HTML 创建新元素var txt2=$("<i></i>").text("love "); // 通过 jQuery 创建新元素var txt3=document.createElement("big"); // 通过 DOM 创建新元素txt3.innerHTML="jQuery!";$("img").after(txt1,txt2,txt3); // 在 img 之后插入新元素}
xxxxxxxxxx.blue{color:blue;}// 添加$("h1,h2,p").addClass("blue");// 移除$("h1,h2,p").removeClass("blue");// 添加/删除类的切换$("h1,h2,p").toggleClass("blue");// 取得css属性$("p").css("background-color");// 设置css属性$("p").css("background-color","yellow");// 设置多个css属性$("p").css({"background-color":"yellow","font-size":"200%"});
xxxxxxxxxx// 获得$("#div1").width()$("#div1").height()$("#div1").innerWidth()$("#div1").innerHeight()$("#div1").outerWidth()$("#div1").outerHeight()// 设置$("#div1").width(500).height(500);
通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍历。
xxxxxxxxxx$("span").parent("ul");$("span").parents("ul");// 返回所有 <span> 元素的所有祖先,并且它是 <ul> 元素$("span").parents("ul");// 返回介于 <span> 与 <div> 元素之间的所有祖先元素$("span").parentsUntil("div");
xxxxxxxxxx$("h2").siblings();$("h2").siblings("p"); // 过滤
三个最基本的过滤方法是:first(), last() 和 eq()
其他过滤方法,比如 filter() 和 not() 允许您选取匹配或不匹配某项指定标准的元素。
xxxxxxxxxx$("p").eq(1);
jQuery 拥有以下滑动方法:
xxxxxxxxxx$(selector).slideDown(speed,callback);$(selector).slideUp(speed,callback);$(selector).slideToggle(speed,callback);
用于创建自定义动画。
xxxxxxxxxx$(selector).animate({params},speed,callback);
xxxxxxxxxx// 它把 <div> 元素往右边移动了250像素$("button").click(function(){$("div").animate({left:'250px'});});
xxxxxxxxxx$("button").click(function(){$("div").animate({left:'250px',opacity:'0.5',height:'150px',width:'150px'});});
xxxxxxxxxx$("button").click(function(){$("div").animate({left:'250px',height:'+=150px',width:'+=150px'});});
您甚至可以把属性的动画值设置为 "show"、"hide" 或 "toggle"
xxxxxxxxxx$("button").click(function(){$("div").animate({height:'toggle'});});
如果您编写多个 animate() 调用,jQuery 会创建包含这些方法调用的"内部"队列。然后逐一运行这些 animate 调用。
xxxxxxxxxx$("button").click(function(){var div=$("div");div.animate({height:'300px',opacity:'0.4'},"slow");div.animate({width:'300px',opacity:'0.8'},"slow");div.animate({height:'100px',opacity:'0.4'},"slow");div.animate({width:'100px',opacity:'0.8'},"slow");});
有一种名为链接(chaining)的技术,允许我们在相同的元素上运行多条 jQuery 命令,一条接着另一条。
xxxxxxxxxx$("#p1").css("color","red").slideUp(2000).slideDown(2000);// 当进行链接时,代码行会变得很长。不过,jQuery 语法不是很严格;您可以按照希望的格式来写,包含换行和缩进。$("#p1").css("color","red").slideUp(2000).slideDown(2000);
Ajax 是一种异步、无刷新(或者说局部页面刷新)技术。
jQuery 封装好的 Ajax
参数:
type:请求方式GET/POST
url: 请求地址 url
async:是否一步,默认是 true 表示异步
data:发送到服务器的数据
dataType:预期服务器返回的数据类型
contentType:设置请求头
success:请求成功时调用此函数
error:请求失败时调用此函数
xxxxxxxxxx$.ajax({type: "get", // 请求方式url: "js/data.txt", // 请求路径dataType: "json", // 预期返回一个 json 类型数据success: function (data) { // data是形参名,代表返回的数据console.log(data);},error:function(err){console.log(err);}});
这是一个简单的 GET 请求功能以取代复杂 $.ajax。
请求成功时可调用回调函数,如果需要在出错时执行函数,请使用 $.ajax
xxxxxxxxxx$.get("请求地址","请求参数",function(形参){....});// 例如$.get('js/data.json',{name:'tom',age:19},function(data){console.log(data);});
$.post 与 $.get用法一模一样。
$.getJSON 只能获取 json 格式的数据,其他的无法获取,而 $.get 和 $.post都可以获取。
x<input id="myInput" type="text" placeholder="请输入想说的话...">$("#myInput").on("input", function () {//实时显示输入的值$("#result").text($(this).val());});
setInterval(code, milliseconds); setInterval(function, milliseconds, param1, param2, ...)
| 参数 | 描述 |
|---|---|
| code/function | 必需。要调用一个代码串,也可以是一个函数。 |
| milliseconds | 必须。周期性执行或调用 code/function 之间的时间间隔,以毫秒计。 |
| param1, param2, ... | 可选。 传给执行函数的其他参数(IE9 及其更早版本不支持该参数)。 |
clearInterval(id_of_setinterval)
clearInterval() 方法可取消由 setInterval() 函数设定的定时执行操作。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
setInterval()产生一个定时器,定义一个定时器标识 ;使用 clearInterval(定时器标识) 来停止。
xxxxxxxxxxvar mytag;function jump(){………… //函数内容}mytag = setInterval("jump",5000); //每个5秒调用一次函数// 当需要停止时$("#mydiv").click(function(){clearInterval(mytag);};});
xxxxxxxxxxvar mytag;function autoPlay(){mytag = setInterval(function(){………… // 函数内容},5000); // 每5秒执行一行}autoPlay(); // 调用函数// 当需要停止时$("#mydiv").click(function(){clearInterval(mytag);};});
setInterval与clearInterval都是直属于window对象。
第一种用法思路比较清晰,先设置一个函数,在通过setInterval来自行调用,但是将其在别处调用比较困难;
第二种方法看起来比较乱,在setInterval内部写下自行调用的函数,然后在给他套上一个有名函数,然后通过调用有名函数来实行自动,在别处调用比较方便。
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
xxxxxxxxxxfunction hello(){alert("hello");}//使用方法名字执行方法var t1 = window.setTimeout(hello,1000);var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法window.clearTimeout(t1);//清除定时器
xxxxxxxxxx//实时刷新时间单位为毫秒setInterval('refreshQuery()',8000);/* 刷新查询 */function refreshQuery(){$("#mainTable").datagrid('reload',null);}
原理:实际上,该例子不是使js脚本进入休眠,而是因为js是单线程,while(true){}死循环调度cpu,使得whlie(){}后面的程序被阻塞,进而实现休眠的假象。
xxxxxxxxxx<script>//参数n为休眠时间,单位为毫秒:function sleep(n) {var start = new Date().getTime();// console.log('休眠前:' + start);while (true) {if (new Date().getTime() - start > n) {break;}}// console.log('休眠后:' + new Date().getTime());}sleep(2000);</script>
跳出each循环
return false 跳出循环
return true 进入下一个循环
跳出for循环
break 直接退出for这个循环。这个循环将不再被执行! continue 直接跳出本次for循环。下次继续执行。 return语句就是用于指定函数返回的值。即使函数主体中还有其他语句,函数执行也会停止!
$(this).attr("id")
$(this).attr("class")
mouseover 事件在鼠标指针进入被选元素或任意子元素时都会被触发,
mouseenter 事件只有在鼠标指针进入被选元素时被触发。
1.mouseover与mouseout
2.mouseenter与 mouseleave
xxxxxxxxxxvar now = new Date();var time = now.getFullYear() + "-" +((now.getMonth()+1)<10?"0":"")+(now.getMonth()+1)+"-"+(now.getDate()<10?"0":"")+now.getDate();(XXXX-XX-XX)// 字符串转成时间对象var mydate = new Date('2022-7-14 15:30:00');var year = mydate.getFullYear();var month = mydate.getMonth()+1; // 默认值为0-11月var day = mydate.getDate();var hours = mydate.getHours();var minutes = mydate.getMinutes();var seconds = mydate.getSeconds();var week = myDate.getDay(); // 返回值为0-6var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];console.log(weeks[week]);//补齐两位数function addleft0(obj) {// 方法1return obj.toString().length == 1 ? "0" + obj: obj;// 方法2return obj.toString().replace(/^[0-9]{1}$/, "0" + obj);}
parseInt(字符串) ,返回一个整数
xxxxxxxxxxparseInt("123") // 返回123parseInt("10.5") // 返回10parseInt("xy123abc") // 返回123
另外parseInt()方法还有基模式,就是可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。
基是由parseInt()方法的第二个参数指定的
xxxxxxxxxxparseInt("10", 2); // returns 2
parseFloat(字符串) ,返回一个浮点数
xxxxxxxxxxparseInt("123") // 返回123.0parseInt("10.5") // 返回10.5parseInt("xy10.5abc") // 返回10.5
Number() 该方法转换的是整个值,而不是部分值。
xxxxxxxxxxNumber(false) 0Number(true) 1Number(undefined) NaNNumber(null) 0Number( "5.5 ") 5.5Number( "56 ") 56Number( "5.6.7 ") NaNNumber(new Object()) NaNNumber(100) 100
toString() 将数字转换为字符串类型
xxxxxxxxxxvar num = 12.5;var numStr = num.toString();console.log(typeof(numStr)); // string
typeof 查看变量的类型
object = JSON.parse("字符串");
string = JSON.stringify(对象);
xxxxxxxxxx//x上限,y下限var x = 100;var y = 50;var rand = parseInt(Math.random() * (x - y + 1) + y);
xxxxxxxxxx//获取不重复随机数function getRandom(lengths) {var arr = [];//存放随机数的数组var arrLen = lengths;//用来限制范围for(var i=0; i<4; i++){var radomNum = parseInt(Math.random() * arrLen);//生成范围内的数据数if(arr.indexOf(radomNum) == -1){//indexOf返回值为-1表示数组中没有和新随机数重复的值arr.push(radomNum);}else{//有重复值i--,不添加重复的值到数组中,并再循环一次i--;};};console.log(arr);return arr;}
css3为了区分伪类和伪元素,伪元素采用双冒号写法。
常见伪类——:hover,:link,:active,:target,:not(),:focus 常见伪元素——::first-letter,::first-line,::before,::after,::selection
::before和::after下特有的content,用于在css渲染中向元素逻辑上的头部或尾部添加内容。
这些添加不会出现在DOM中,不会改变文档内容,不可复制,仅仅是在css渲染层加入。
所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容。
content属性
::before和::after必须配合content属性来使用,content用来定义插入的内容,content必须有值,至少是空。默认情况下,伪类元素的display是默认值inline,可以通过设置display:block来改变其显示。
string
使用引号包一段字符串,将会向元素内容中添加字符串。如:a:after{content:""}
attr()
通过attr()调用当前元素的属性,比如将图片alt提示文字或者链接的href地址显示出来。
xxxxxxxxxx<style type="text/css">a::after{content: "(" attr(href) ")";}</style><a href="http://www.cnblogs.com/starof">starof</a>
url()/uri()
用于引用媒体文件。
xxxxxxxxxxa::before{content: url("https://www.baidu.com/img/baidu_jgylogo3.gif");}
counter()
调用计数器,可以不使用列表元素实现序号功能。配合counter-increment和counter-reset属性使用:
h2:before { counter-increment: chapter; content: "Chapter " counter(chapter) ". " }
在一个声明中设置所有背景属性
xxxxxxxxxxbackground: #00FF00 url(bgimage.gif) no-repeat fixed top;
| 参数 | 描述 |
|---|---|
| background-color | 规定要使用的背景颜色。 |
| background-position | 规定背景图像的位置。 |
| background-size | 规定背景图片的尺寸。 |
| background-repeat | 规定如何重复背景图像。 |
| background-origin | 规定背景图片的定位区域。 |
| background-clip | 规定背景的绘制区域。 |
| background-attachment | 规定背景图像是否固定或者随着页面的其余部分滚动。 |
| background-image | 规定要使用的背景图像。 |
| inherit | 规定应该从父元素继承 background 属性的设置。 |
用来设置背景图像的铺排填充方式, 默认值: repeat 。
repeat 表示横向纵向上均平铺;
no-repeat 表示不平铺;
repeat-x 表示横向上平铺,
repeat-y 表示纵向上平铺
round 表示背景图像自动缩放直到适应且填充满整个容器。 注意: 当设置为 round 时, background-size 的 cover 和 contain 属性失效。
space 表示背景图像以相同的间距平铺且填充满整个容器或某个方向. 注意: 当 background-size 设置为 cover 和 contain 时, background-rapeat 的 space 属性失效。
用来设置背景图像的位置, 默认值: 0% 0%, 效果等同于 left top。
如果设置一个值, 则该值作用在横坐标上, 纵坐标默认为50%(即center) ; 如果设置两个值, 则第一个值作用于横坐标, 第二个值作用于纵坐标,
取值可以是方位关键字[left\top\center\right\bottom], 如 background-position: left center ;
也可以是百分比或长度, 百分比和长度可为设置为负值, 如: background-position: 10% 30px ;
用来设置背景图像是随对象内容滚动还是固定的,默认值 scroll。
fixed 背景图像相对窗体固定,即内容滚动时,图片不动; scroll 相对元素固定,背景图像跟随元素本身,元素内容滚动时背景图像不动; local 相对元素内容固定,背景图像跟随元素内容。
语法:event.target
规定返回的最后一个值来自哪个事件。这个 event 参数来自事件绑定函数。
例:显示哪个 DOM 元素触发了事件
xxxxxxxxxx<h1>这是一个标题</h1><h2>这是另一个标题</h2><p>这是一个段落</p><button>这是一个按钮</button><div id="output"></div>$("p, button, h1, h2").click(function(event){$("#output").html("点击事件由一个 " + event.target.nodeName + " 元素触发");});
xxxxxxxxxx.attr('checked); //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('checked'); //16+:true/false.is(':checked'); //所有版本:true/false
xxxxxxxxxx所有的jquery版本都可以这样赋值:// $("#cb1").attr("checked","checked");// $("#cb1").attr("checked",true);jquery1.6+:prop的4种赋值:// $("#cb1″).prop("checked",true);//很简单就不说了哦// $("#cb1″).prop({checked:true}); //map键值对// $("#cb1″).prop("checked",function(){return true;//函数返回true或false});//记得还有这种哦:$("#cb1″).prop("checked","checked");
xxxxxxxxxx方法1:$("#ischange").change(function() {alert("checked");});方法2:$(function(){if ($.browser.msie) {$('input:checkbox').click(function () {this.blur();this.focus();});};方法3:$("#ischange").change(function() {alert("checked");});});方法4:$(function(){if ($.browser.msie) {$('input:checkbox').click(function () {this.blur(); this.focus();});};});方法5:$(document).ready(function(){$("testCheckbox").change(function() {alert("Option changed!");});});
xxxxxxxxxx<table><thead><caption>表头名称</caption><tr><th>姓名</th><th>性别</th><th>电话</th></tr></thead><tbody><tr><td>张三</td><td>男</td><td>13912345678</td></tr></tbody></table>
这是<table><tr><td>都识别的属性
align="left/center/right"width="800",height=600,像素px可以省略不写。valign="top/middle/bottom" separate,默认值,边框独立;
collapse,相邻边框被合并。
在指定位置截取字符串。用于返回字符串中指定位置的子字符串。
xxxxxxxxxxstring.substring(start, end)
作用是用于从指定位置截取指定长度的字符串。
xxxxxxxxxxstring.substr(start [, length ])
作用是将字符串分割为子字符串,并将结果作为字符串数组返回。
xxxxxxxxxxstring.split([separator[, limit]])
指定的子串在字符串中的位置,如果没有找不到子串,则返回 -1。
xxxxxxxxxxstring.indexOf(subString[, startIndex])
用于数组中元素的连接
xxxxxxxxxxvar arr = [1,2,3,4,5];arr.join("-") // 1-2-3-4-5
xxxxxxxxxxalert("hellow");
如果点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false。
xxxxxxxxxxif(confirm("你确定删除吗?")){//点击确定后操作};
xvar word1 = prompt("请输入一段文字");//第一个参数是提示文字,第二个参数是文本框中默认的内容var word2 = prompt("请输入一段文字","");if(word2){//输出word的格式alert("已获得:"+word2);};
xxxxxxxxxxlet arr = [1,1,2,3,5,7,7,7];// 方法1,利用Array.from将Set结构转换成数组let newArr = Array.from(new Set(arr));// 方法2,扩展运算符和 Set 结构相结合let newArr = [...new Set(arr)];// 方法3,filter方法let newArr = arr.filter((x,index,self)=>self.indexOf(x)===index)
记住一句话:对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
https://blog.csdn.net/astonishqft/article/details/82899965
xxxxxxxxxxvar file = $("#file")file.after(file.clone().val(""));file.remove();
xxxxxxxxxxvar arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度a[0] = 10;a[1] = "aaa";a[2] = 12.6;// 可以实例化的时候直接赋值var a = new Array(1, 2, 3, 4, 5);var b = [1, 2, 3, 4, 5];
xxxxxxxxxxvar testGetArrValue=arrayObj[1]; //获取数组的元素值arrayObj[1]= "这是新值"; //给数组元素赋予新的值
xxxxxxxxxxvar a = ["aa","bb","cc"];console.log(a.push("dd")); // -> 4console.log(a); // -> aa,bb,cc,ddconsole.log(a.push([1,2,3])); // -> 5console.log(a); // -> aa,bb,cc,dd,1,2,3//跟concat的区别在于,concat不影响原数组,直接返回新数组,而push则直接修改原数组,返回的是数组新长度
splice() 方法,可以删除数组中的指定元素。
删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素;
常用实例:
xxxxxxxxxxvar arr = ['a','b','c','d'];arr.splice($.inArray('c',arr),1);// 结果:arr =['a','b','d']
xxxxxxxxxxvar a = ["aa","bb","cc"];console.logconsole.log(a.pop()); // -> ccconsole.log(a); // -> aa, bbvar a = [1,2,3,4,5,6,7,8,9];console.log(a.splice(3,2)); // -> 4,5console.log(a); // -> 1,2,3,6,7,8,9
arrayObj.slice(start, [end]); 以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); 将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
xxxxxxxxxxvar arrA = [1,2];var arrB = [3,4];var arrC = [5,6];var arrD = [7,8];var NewArr = [];NewArr = arrA.concat(arrB,arrC,arrD);// result: 1,2,3,4,5,6,7,8
xxxxxxxxxxvar a = [123];var b = "sunnycat";var c = ["www",21,"ido"];var d = {x:3.14, y:"SK"};var e = [1,2,3,4,[5,6,[7,8]]];alert(a.concat(b)); // -> 123,sunnycatalert(a); // -> 123alert(b.concat(c, d)); // -> sunnycatwww,21,ido[object Object]alert(c.concat(b)); // -> www,21,ido,sunnycatalert(e.concat(11,22,33).join(" # ")); // -> 1 # 2 # 3 # 4 # 5,6,7,8 # 11 # 22 # 33
需要注意的是只能用于数组或字符串,如果被连接(前面的a)的是数值、布尔值、对象,就会报错,字符串连接数组时,字符串会跟数组首元素拼接成新元素,而数组连接字符串则会追加新元素(这点我也不清楚原委,知情者请透露),对于数组里面包含数组、对象的,连接后保持原样
xxxxxxxxxxvar a = ['a','b','c','d','e','f','g'];alert(a.join(" * ")); // -> a * b * c * d * e * f * g
xxxxxxxxxx// 随机打乱数组函数var RandomShuffleArr = function (a) {var len = a.length;for(var i=0;i<len;i++){var end = len - 1 ;var index = (Math.random()*(end + 1)) >> 0;var t = a[end];a[end] = a[index];a[index] = t;}return a;};
each遍历是for循环的变体,但比for循环强大.在数组中,它可以轻松的获取数组索引及对应的值。如果需要退出 each 循环可使回调函数返回 false。
xxxxxxxxxxvar _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; //本文所用到的数组, 下同$.each(_mozi,function(key,val){//回调函数有两个参数,第一个是元素索引,第二个为当前值alert('_mozi数组中 ,索引 : '+key+' 对应的值为: '+val);});
$.grep() 函数使用指定的函数过滤数组中的元素,并返回过滤后的数组。
提示:源数组不会受到影响,过滤结果只反映在返回的结果数组中。
语法
xxxxxxxxxx$.grep( array, function(elementOfArray, indexInArray) [, invert ] )| 参数 | 描述 |
|---|---|
| array | Array类型 将被过滤的数组。 |
| function | Function类型 指定的过滤函数。grep()方法为function提供了两个参数:其一为当前迭代的数组元素,其二是当前迭代元素在数组中的索引。 |
| invert | 可选。 Boolean类型 默认值为false,指定是否反转过滤结果。如果参数invert为true,则结果数组将包含function返回false的所有元素。 |
例:
xxxxxxxxxx<div></div><p></p><span></span><script>$(function () {// 选出数组里面不大于5,且索引号大于4的元素。var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];$( "div" ).text( arr.join( ", " ) );arr = jQuery.grep(arr, function( element, index ) {return ( element > 5 && index > 4 );});// 选出数组里面不等于9的元素$( "p" ).text( arr.join( ", " ) );arr = $.grep(arr, function( a ) {return a == 9;true },);$( "span" ).text( arr.join( ", " ) );});
解释: 确定第一个参数在数组中的位置, 从0开始计数(如果没有找到则返回 -1 。
解释:对于array中的每个元素,调用callback()函数,最终返回一个新的数组,原数组不变。
xxxxxxxxxx$(function () {var arrInt = [1, 3, 5, 79];//map返回来的是一个新数组,第个值乘2var b = $.map(arrInt, function (value, key) {return value * 2;});console.log(b); // b.join(","),使用“,”符号连接成字符串})
解释: 返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素;
这个方法是用jQuery的方法替代原生concat()方法, 但功能并没有concat()强大, concat()可以同时合并多个数组。
解释: 删除数组中重复元素. 只处理删除DOM元素数组,而不能处理字符串或者数字数组. 第一次看到这个方法,觉得这是个很便捷的方法, 可以过滤重复, 哈, 多完美, 但仔细一看, 仅限处理DOM元素. 功能8折了.所以, 我给它定义成了一个不常用的元素, 至少, 我用jQuery以来没用到过它
解释: 将类数组对象转换为数组对象, 类数组对象有 length 属性,其成员索引为0至 length-1. 这是个多余的方法, 无所不能的$本来就包含了这个功能. jQuery官网上解释的非常模糊. 其实, 它就是将某个类数组对象(比如用getElementsByTagName获取的元素对象集合)转换成数组对象.
解释: 把jQuery集合中所有DOM元素恢复成一个数组; 并不常用的方法, 个人甚至觉得它和$.makeArray一样多余.
xxxxxxxxxx// 利用filter方法来遍历是否有相同的元素var arr3 = arr2.filter(function(v){return arr1.indexOf(v)!==-1});// ES7写法let intersection = a.filter(v => b.includes(v))
xxxxxxxxxxvar result = arr2.concat(arr3 ).filter(function (v) {return arr2.indexOf(v)===-1 || arr3 .indexOf(v)===-1});// ES7写法let difference = a.concat(b).filter(v => !a.includes(v) || !b.includes(v))
xxxxxxxxxxvar a = [1,2,3,4,5]var b = [2,4,6,8,10]console.log("数组a:", a);console.log("数组b:", b);// 交集let intersect = $(a).filter(b).toArray();// 差集let minus = $(a).not(b).toArray();// 补集let complement = $(a).not(b).toArray().concat($(b).not(a).toArray());// 并集let unionSet = $.unique(a.concat(b));console.log("a与b的交集:", intersect);console.log("a与b的差集:", minus);console.log("a与b的补集:", complement);console.log("a与b的并集:", unionSet);
注意:数组a和b的顺序不一样,结果不一样,使用之前最好测试看下结果
在 ES6 中我们可以借助扩展运算符(…)以及 Set 的特性实现相关计算,代码也会更加简单些。
xxxxxxxxxxvar a = [1,2,3,4,5]var b = [2,4,6,8,10]console.log("数组a:", a);console.log("数组b:", b);var sa = new Set(a);var sb = new Set(b);// 交集let intersect = a.filter(x => sb.has(x));// 差集let minus = a.filter(x => !sb.has(x));// 补集let complement = [...a.filter(x => !sb.has(x)), ...b.filter(x => !sa.has(x))];// 并集let unionSet = Array.from(new Set([...a, ...b]));console.log("a与b的交集:", intersect);console.log("a与b的差集:", minus);console.log("a与b的补集:", complement);console.log("a与b的并集:", unionSet);
xxxxxxxxxxvar a = [1,2,3,4,5]var b = [2,4,6,8,10]//交集var c = a.filter(function(v){ return b.indexOf(v) > -1 })//差集var d = a.filter(function(v){ return b.indexOf(v) == -1 })//补集var e = a.filter(function(v){ return !(b.indexOf(v) > -1) }).concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}))//并集var f = a.concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}));console.log("数组a:", a);console.log("数组b:", b);console.log("a与b的交集:", c);console.log("a与b的差集:", d);console.log("a与b的补集:", e);console.log("a与b的并集:", f);
xxxxxxxxxx//数组功能扩展//数组迭代函数Array.prototype.each = function(fn){fn = fn || Function.K;var a = [];var args = Array.prototype.slice.call(arguments, 1);for(var i = 0; i < this.length; i++){var res = fn.apply(this,[this[i],i].concat(args));if(res != null) a.push(res);}return a;};//数组是否包含指定元素Array.prototype.contains = function(suArr){for(var i = 0; i < this.length; i ++){if(this[i] == suArr){return true;}}return false;}//不重复元素构成的数组Array.prototype.uniquelize = function(){var ra = new Array();for(var i = 0; i < this.length; i ++){if(!ra.contains(this[i])){ra.push(this[i]);}}return ra;};//两个数组的交集Array.intersect = function(a, b){return a.uniquelize().each(function(o){return b.contains(o) ? o : null});};//两个数组的差集Array.minus = function(a, b){return a.uniquelize().each(function(o){return b.contains(o) ? null : o});};//两个数组的补集Array.complement = function(a, b){return Array.minus(Array.union(a, b),Array.intersect(a, b));};//两个数组并集Array.union = function(a, b){return a.concat(b).uniquelize();};
xxxxxxxxxxvar a = [1,2,3,4,5]var b = [2,4,6,8,10]console.log("数组a:", a);console.log("数组b:", b);console.log("a与b的交集:", Array.intersect(a, b));console.log("a与b的差集:", Array.minus(a, b));console.log("a与b的补集:", Array.complement(a, b));console.log("a与b的并集:", Array.union(a, b));
xxxxxxxxxx<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>JS读取本地文件</title></head><body><div><div>方法一</div><input type="file" id="myID1" style="display: none" onchange="fileImport();"><input type="button" id="fileImportBtn" value="导入"><div>方法二</div><input type="file" id="myID2" onchange="fileImport2();"></div><div id="output"></div><!-- <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> --><script src="./jquery-3.5.0.min.js"></script><script>//点击导入按钮,使files触发点击事件,然后完成读取文件的操作$("#fileImportBtn").click(function() {$("#myID1").click();})function fileImport() {//获取读取我文件的File对象var selectedFile = document.getElementById('myID1').files[0];// var selectedFile = $('#myID1').get(0).files[0]; // 与上一行等价var name = selectedFile.name; //读取选中文件的文件名var size = selectedFile.size; //读取选中文件的大小console.log("文件名:" + name + "大小:" + size);var reader = new FileReader(); //这是核心,读取操作就是由它完成.reader.readAsText(selectedFile,"GBK"); //读取文件的内容,也可以读取文件的URLreader.onload = function() {//当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可console.log(this.result);$("#output").html(this.result);}}</script><script type="text/javascript">// 定义函数function fileImport2(){//获取读取我文件的File对象var selectedFile = $('#myID2').get(0).files[0];var reader = new FileReader(); //这是核心,读取操作就是由它完成.reader.readAsText(selectedFile,"GBK"); //读取文件的内容,也可以读取文件的URLreader.onload = function(){//当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可console.log(this.result); // 与reader.result一样$("#output").html(this.result);};};</script></body></html>
xxxxxxxxxx// 参数str为读取出的字符function getArray(str){var re = /(\r\n|\n)/g;var tmpStr = str.replace(re,",");var Arr = tmpStr.split(",");// $.grep筛选或者使用for循环过滤掉空值var newArr = $.grep(Arr,function(element,index){ return element==""},true)console.log("新数组:\n",newArr);};
FileReader是一种异步读取文件机制,结合input:file可以很方便的读取本地文件。
1、首先需要实例化一个FileReader对象
2、FileReader提供的方法:
①readAsArrayBuffer(file): 按字节读取文件内容,结果用ArrayBuffer对象表示;
②readAsBinaryString(file): 按字节读取文件内容,结果为文件的二进制串;
③readAsDataURL(file): 读取文件内容,结果用data:url的字符串形式表示;
④readAsText(file,encoding): 按字符读取文件内容,结果用字符串形式表示;
⑤abort(): 终止文件读取操作.
其中readAsDataURL和readAsText较为常用,这里只对这两者进行说明。
3.1readAsDataURL会将文件内容进行base64编码后输出:
xxxxxxxxxxvar inputBox = document.getElementById("inputBox"); // dom对象inputBox.addEventListener("change",function(){var reader = new FileReader();reader.readAsDataURL(inputBox.files[0]);//发起异步请求reader.onload = function(){//读取完成后,数据保存在对象的result属性中console.log(this.result);//base64内容显示}})
3.2由于媒体文件的src属性,可以通过采用网络地址或base64的方式显示,因此我们可以利用readAsDataURL实现对图片的预览。
xxxxxxxxxx<input type="file" id="inputBox" ><img src="" id="img">var inputBox = document.getElementById("inputBox");var img = document.getElementById("img");inputBox.addEventListener("change",function(){var reader = new FileReader();reader.readAsDataURL(inputBox.files[0]);//发起异步请求reader.onload = function(){//读取完成后,将结果赋值给img的srcimg.src = this.result;}})
$("#div")得到的是[object Object],即jquery对象。
document.getElementById("div")得到的是[object HTMLDivElement],即dom对象。
两种方法:[index]和.get(index)
$("#div")[0]或者$("#div").get(0)
只需要用$()把DOM对象包装起来。
var v = document.getElementById("myID"); //DOM对象 var $v = $(myID); //jQuery对象
以前一直认为jquery中的$("#id")和document.getElementById("id")得到的效果是一样的,今天做特效的时候才发现并不是这么一回事,通过测试得到:
1、alert($("#div"))得到的是[object Object]
2、alert(document.getElementById("div"))得到的是[object HTMLDivElement]
3、alert($("#div")[0])或者alert($("#div").get(0))得到的是[object HTMLDivElement]
原因解读:
document.getElementById()返回的是DOM对象,而$()返回的是jQuery对象
---就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。 比如: $("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法** 这段代码等同于用DOM实现代码: document.getElementById("id").innerHTML; 虽 然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会 报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的。 还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById("id")得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。 既 然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。在两者转换前首先我们给一个约定:如果一个获取的是jQuery对 象,那么我们在变量前面加上$,如:var $variab = jQuery对象;如果获取的是DOM对象,则与习惯普通一样:var variab = DOM对象;这么约定只是便于讲解与区别,实际使用中并不规定。
**两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。 如:var $v =$("#v") ; //jQuery对象 var v=$v[0]; //DOM对象 alert(v.checked) //检测这个checkbox是否被选中 (2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象 如:var $v=$("#v"); //jQuery对象 var v=$v.get(0); //DOM对象 alert(v.checked) //检测这个checkbox是否被选中
对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象) 如:var v=document.getElementById("v"); //DOM对象 var $v=$(v); //jQuery对象 转换后,就可以任意使用jQuery的方法了。 通过以上方法,可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是:DOM对象才能使用DOM中的方法,jQuery对象是不可以用DOM中的方法。
普通的Dom对象一般可以通过$()转换成jQuery对象。
如:$(document.getElementById("msg")) 返回的就是jQuery对象,可以使用jQuery的方法。
由于jQuery对象本身是一个集合。所以如果jQuery对象要转换为Dom对象则必须取出其中的某一项,一般可通过索引取出。 如: $("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]
这些都是Dom对象,可以使用Dom中的方法,但不能再使用jQuery的方法。
以下几种写法都是正确的: $("#msg").html(); $("#msg")[0].innerHTML; $("#msg").eq(0)[0].innerHTML; $("#msg").get(0).innerHTML;
如有
document.getElementById('formid');
$('#formid')
document.getElementsByName('formName')[0]
$("form[name='formName']")

xxxxxxxxxx<!DOCTYPE html><html><head><meta charset="utf-8"><title>表格奇偶行变色</title><!-- 引入jquery库 --><script src="./js/jquery-3.6.0.min.js" type="text/javascript"></script><style>.even { background-color: #FFFFFF; }.odd { background-color: #EEEEEE; }.s { background-color: #FF6500; } /* 选中的样式只能放在后面,才能掩盖原来的样式 */.selectedcolor{background-color:green;}table { border: 1px solid black; text-align: center; border-collapse: collapse; }th,td { border: 1px solid black; padding: 5px; }</style></head><body><table><thead><tr><th style="width: 70px;">选项</th><th style="width: 90px;">姓名</th><th style="width: 90px;">性别</th><th style="width: 200px;">暂住地</th></tr></thead><tbody><tr><td><input type="checkbox" class="box" /></td><td>张三</td><td>男</td><td>四川成都</td></tr><tr><td><input type="checkbox" class="box" /></td><td>李四</td><td>女</td><td>四川绵阳</td></tr><tr><td><input type="checkbox" class="box" /></td><td>王五</td><td>男</td><td>四川南充</td></tr><tr><td><input type="checkbox" class="box" /></td><td>赵六</td><td>男</td><td>四川自贡</td></tr></tbody></table></body><script type="text/javascript">$(function() {// 奇偶行颜色$("tbody>tr:odd").addClass("odd");$("tbody>tr:even").addClass("even");// 鼠标移动到表格行变色$("tbody>tr").mouseover(function(){ $(this).addClass("s"); });$("tbody>tr").mouseout(function(){ $(this).removeClass("s"); });// 方法1,checkbox事件$("tbody>tr>td input").change(function(){var checkboxValue = $(this).is(":checked");if(checkboxValue){$(this).parents('tr').addClass("selectedcolor");}else{$(this).parents('tr').removeClass("selectedcolor");};});// 方法2,// 1)选中行后变色;2)选中与取消的轮换// $("tbody>tr").click(function() {// // var $that = $(this);// var checkboxValue = $(this).find(".box").is(":checked");// if(checkboxValue){// $(this).find(".box").removeAttr("checked");// $(this).removeClass("selectedcolor");// }else{// $(this).find(".box").attr("checked", true);// $(this).addClass("selectedcolor");// };// });});</script></html>
html:
xxxxxxxxxx<div class="area"><label>省份:</label><select name="province" id="province"></select><label>城市:</label><select name="city" id="city"></select></div>
js:
xxxxxxxxxx<script type="text/javascript">var CITYS = {"北京": ["北京"],"上海": ["上海"],"天津": ["天津", "塘沽"],"重庆": ["重庆", "涪陵", "江津", "巫山"],"河北": ["石家庄", "张家口", "承德", "秦皇岛", "唐山", "廊坊", "保定", "衡水", "邢台"],"山西": ["太原", "大同", "朔州", "阳泉", "长治", "晋城", "忻州", "晋中", "临汾", "运城"],"四川": ["成都", "广元", "绵阳", "德阳", "南充", "广安", "内江", "乐山", "自贡", "泸州"],"浙江": ["杭州", "湖州", "嘉兴", "舟山", "宁波", "绍兴", "衢州", "金华", "台州", "温州"],};$(function () {//初始化 所有的省的数据$.each(CITYS,function (keyPro,val_city) {var $option = "<option>"+keyPro+"</option>";$("#province").append($option);});//省的数据改变时加载市的数据$("#province").on("change",function(){var province = $("#province option:selected").text();// console.log(province);$("#city").empty();$.each(CITYS[province],function (i,val) {$("#city").append("<option>"+val+"</option>")});})//上来后初始化一下城市的数据$("#province").triggerHandler("change");})</script>
xxxxxxxxxxvar time = 60;$("#test").click(function (){//如果不加入该判断,则会出现在倒计时期间不断的点击发生不断的加快(其实就是你点了多少次就重复多少次该函数)的问题,用setTimeout()方法不加此判断也是一样的if(time==60){var time1 = setInterval(function(){if(time==0){clearInterval(time1);}else{time--;$("#xxxx").html(time);}}, 1000);};});
xxxxxxxxxx<!DOCTYPE html><html><head><meta charset="utf-8"><title>自定义弹出框页面</title><!-- 引入jquery库 --><script src="./js/jquery-3.6.0.min.js" type="text/javascript"></script><style>/* 弹出框页面 */#PopupBox{background-color: #CCDDFF;display: none;line-height: 50px;width : 400px;height : 300px;border:5px solid #FFF;position : fixed;left : 50%;top : 50%;transform: translate(-50%, -50%);z-index: 110;}#PopupBox div{margin: auto;text-align: center;}#PopupBox div input{outline: none;border:0;width: 160px;font-size: 22px}#PopupBox div:last-child>button:nth-child(2){ margin-left: 30px;}/* 半透明的遮罩层 */#overlay {background: #000;filter: alpha(opacity=50); /* IE的透明度 */opacity: 0.5; /* 透明度 */position: absolute;top: 0;left: 0;width: 100%; /* 或者 top=0;bottom=0 */height: 100%;z-index: 100; /* 此处的图层要小于弹出框页面 */display:none;}</style></head><body><h1>自定义弹出框页面</h1><div><button id="openPopupBoxbtn">弹出新页面框</button></div><div id="overlay"></div><div id="PopupBox"><div><button id="close">关闭</button></div><div><label>学号</label><input type="text" value="" /></div><div><label>姓名</label><input type="text" value="" /></div><div><label>分数</label><input type="text" value="" /></div><div><button id="cancel">取消</button><button id="confirm">确定</button></div></div></body><script type="text/javascript">$("#openPopupBoxbtn").click(function(){$("#overlay").show();$("#PopupBox").show(1000);});$("#close,#cancel,confirm").click(function(){$("#PopupBox").hide(1000);$("#overlay").hide();});</script></html>
===========================END=========================
| 字符 | 描述 |
|---|---|
| \ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。 |
| ^ | 匹配输入字符串的开始位置;除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。 |
| $ | 匹配输入字符串的结束位置。 |
| * | 匹配前面的子表达式零次或多次。 |
| + | 匹配前面的子表达式一次或多次。 |
| ? | 匹配前面的子表达式零次或一次。等价于 {0,1}。指明一个非贪婪限定符 |
| . | 匹配除换行符“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像"(.|\n)”的模式。 |
| {n} | n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 |
| {n,} | n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o”。 |
| {n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。请注意在逗号和两个数之间不能有空格。'o{0,1}' 等价于 'o?'。 |
| | | 指明两项之间的一个选择。 |
| ( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
| \n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
| \r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
| \t | 匹配一个制表符。等价于 \x09 和 \cI。 |
| \v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
| \f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
| \d | 匹配一个数字字符。等价于 [0-9] |
| \D | 匹配一个非数字字符。等价于 [^0-9] |
| \w | 匹配字母、数字、下划线。等价于[A-Za-z0-9_] |
| \W | 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_] |
| \s | 匹配任何空白字符,包括空格、制表符、换行符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
| \S | 匹配任何非空白字符。等价于 “[^ \f\n\r\t\v]”。 |
| (pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '(' 或 ')'。 |
| (?:pattern) | 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 |
| (?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
| (?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
| 修饰符 | 描述 |
|---|---|
| i | ignore - 不区分大小写 |
| g | global - 全局匹配;查找所有的匹配项 |
| m | multi line - 多行匹配 |
| 匹配空行 | /^\s*$/ |
|---|---|
| 中文字符 | [\u4e00-\u9fa5] |
| 必须同时包含字符和数字和特殊字符,可用于密码验证 | ^(?=.*\d)(?=.*[a-zA-Z])(?=.[!@#$%^&?=+_])(.{8,18})$ |
| 匹配 HTML 标记 | /<\s(\S+)(\s[^>])?>[\s\S]<\s\/\1\s*>/ |
格式:stringObj.match(rgExp)
stringObj为字符串必选 ;rgExp为正则表达式必选项。
返回值:如果能匹配则返回结果数组,如果不能匹配返回null。
我们必须明确的是,这个方法跟其他语言是不同的。
全局标示g
当有g时,匹配整个字符串;当无g时,匹配首次的子符串。 var reg = / 正则表达式 /g
xxxxxxxxxxvar str = 'AAA18BBB99CCC86DDD13';var res = str.match(/\d+/); //只能匹配字符串中出现的首个数字,未使用全局匹配符g// 结果:res=[18]// 当有g时:res = [18,99,86,13]
test() 方法用于检测一个字符串是否匹配某个模式.
语法:RegExpObject.test(string)
返回值:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
xxxxxxxxxximport res = '3123C72D1D8E67'r = re.match('\d',s)print(r)r1 = re.search('\d',s)print(r1.group())r2 = re.findall('\d',s)
结果
xxxxxxxxxx<_sre.SRE_Match object; span=(0, 1), match='3'>3['3', '1', '2', '3', '7', '2', '1', '8', '6', '7']
===================================END=====================================
xxxxxxxxxx.box{display: flex;display: inline-flex; /*行内元素*/display: -webkit-flex; /* Safari Webkit内核的浏览器 */}
注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。
flex-direction属性决定主轴的方向(即项目的排列方向)。
xxxxxxxxxxflex-direction: row | row-reverse | column | column-reverse;
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
xxxxxxxxxxflex-wrap: nowrap | wrap | wrap-reverse;
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
xxxxxxxxxxflex-flow: <flex-direction> <flex-wrap>;
justify-content属性定义了项目在主轴上的对齐方式。
xxxxxxxxxxjustify-content: flex-start | flex-end | center | space-between | space-around;
align-items属性定义项目在交叉轴(副轴/侧轴)上如何对齐。
xxxxxxxxxxalign-items: flex-start | flex-end | center | baseline | stretch;
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
xxxxxxxxxxalign-content: flex-start | flex-end | center | space-between | space-around | stretch;
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
xxxxxxxxxxorder: <integer>;
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
xxxxxxxxxxflex-grow: <number>; /* default 0 */
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
xxxxxxxxxxflex-shrink: <number>; /* default 1 */
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
xxxxxxxxxxflex-basis: <length> | auto; /* default auto */
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
xxxxxxxxxxflex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
xxxxxxxxxxalign-self: auto | flex-start | flex-end | center | baseline | stretch;
第1步,在项目的根目录vue.config.js中写入
xxxxxxxxxxmodule.exporte ={devSever:{before:require('./mymock/index.js') // 引入mymock/index.js}}
第2步,新建mymock/index.js文件
xxxxxxxxxxconst fs = require('fs')const path = require('path')const Mock = require('mockjs'); //mockjs 导入依赖模块const JSON5 = require('json5')// 读取json文件function getJsonFile(filePath){//读取指定json文件var json = fs.readFileSync(path.resolve(__dirname,filePath), 'utf-8')// 解析返回return JSON5.parse(json)}// 返回一个函数module exports = function(app){//监听http请求app.get('/user/userinfo',rep,res){// 每次请求时读取mock data的josn文件// getJSONFile方法定义了如何读取json文件并解析成数据对象var json = getJsonFile('./userInfo.json5');//将json传入Mock.mock方法中,生成的数据返回 给浏览器res.json(Mock.mock(json));}}
第3步,vue中使用
xxxxxxxxxximport axios from 'axios'......axis.get('/user/userinfo').then(res=>{console.log(res);}).catch(err=>{console.log(err);})
详细情况如下
创建项目vue-cli
xxxxxxxxxxvue create mock-demo
进入项目mock-demo
xxxxxxxxxxcd mock-demo# run run serve
新建mymock/testMock.js
xxxxxxxxxxconst Mock = require('mockjs'); //mockjs 导入依赖模块let id = Mock.mock('@id') // 随机的id,字符串console.log(id);let obj = Mock.mock({id:"@id()",username:"@cname()",date:"@date()",ip:"@ip()",email:"@email()",// 图片,参数size,background,foreground,textavatar:"@image('200*200','red','#fff','avatar')",});console.log(obj);
可以在终端中输入查看:node testmock.js
安装依赖
xxxxxxxxxx# 使用axios发送ajax请求cnpm install axios --save# 使用mockjs产生模拟数据cnpm install mockjs --save-dev# 使用json5解决json文件,无法添加注释问题cnpm install json5 --save-dev
新建mymock/userInfo.json5
xxxxxxxxxx{id:"@id()",username:"@cname()",date:"@date()",ip:"@ip()",email:"@email()",// 图片,参数size,background,foreground,textavatar:"@image('200*200','red','#fff','avatar')",}
安装json5之后才可以使用注释,否则注释报错!
新建mymock/testJSON5.js
xxxxxxxxxxconst fs = require('fs')const path = require('path')const JSON5 = require('json5')var json = fs.readFileSync(path.join(__dirname,'./userInfo.json5'),'utf-8')// console.log(json)var obj = JSON5.parse(json)console.log(obj)
在html文件中,引入jquery.js和mock.js
xxxxxxxxxx<head><script src="https://cdn.bootcss.com/jquery/3.6.0/jquery.min.js"></scrpt><script src="https://cdn.bootcss.com/Mock.js/1.0.0/mock.min.js"></scrpt></head>
新建mymock/index.js文件(自定义的模拟数据)
xxxxxxxxxxMock.mock('/user/userinfo','get',{id:"@id()",username:"@cname",date:"@date()",ip:"@ip()",email:"@email()"});
引入自定义的index.js文件
xxxxxxxxxx<script src="./mymock/index.js"></scrpt>
发送ajax请求
xxxxxxxxxx$.ajax({url:'/user/userinfo',dataType:'json',success:(data)=>{console.log(data);}});