标签:onclick argument tor prompt err 交换 安全 一段 参数
来源于:http://blog.poetries.top/2016/10/20/review-jQuery/
http://www.jianshu.com/p/f8e3936b34c9
首先,来了解一下jQuery
学习的整体思路
JQuery
概念
javascript
概念
Js
语言的API
和语法组织逻辑,通过内置window
和document
对象,来操作内存中的DOM
元素JQuery
概念
javascript
的,同上,提高了代码的效率jQuery
是什么:
javascript
代码仓库,我们称之为javascript
框架。javascript
框架,可以简化查询DOM
对象、处理事件、制作动画、处理Ajax
交互过程。js
文件)DOM
操作的封装Ajax
CSS
选择器更精确、灵活)DOM
,动态添加、移除样式)ajax
)如何引入JQuery
包
JQuery
Google
在线提供的库文件(稳定可靠高速)使用Google
提供的API
导入 <script type=“text/javascript” src=“jquery.js”></script>
写第一个JQUery
案例
JQuery
库中,$
是JQuery
的别名,$()
等效于就jQuery()
1
2
3
4
5
6
|
<script type=“text/javascript” src=“”></script>
<script type=“text/javascript”>
$(function(){
alert(“jQuery 你好!”);
});
</script>
|
讲解$(function(){})
;
$
是jQuery
别名。如$()
也可jQuery()
这样写,相当于页面初始化函数,当页面加载完毕,会执行jQuery()
。JQuery
操作DOM
文档。必须确保在DOM
载入完毕后开始执行,应该用ready
事件做处理HTML
文档的开始$(document).ready(function(){})
;
js
的window.onload
事件函数,但是ready
事件要先于onload
事件执行window.onload = function(){}
;为方便开发,jQuery
简化这样的方法,直接用$()
表示
JQuery
的ready
事件不等于Js
的load
:
load
需要等外部图片和视频等全部加载才执行。ready
是DOM
绘制完毕后执行,先与外部文件load
只可写一次,ready
可以多次window.onload
与$(document).ready()
对比window.onload | $(document).ready() | |
---|---|---|
执行时机 | 必须等网页中所有内容加载完后(图片)才执行 | 网页中的DOM 结构绘制完后就执行,可能DOM 元素相关的东西并没有加载完 |
编写个数 | 不能同时执行多个 | 能同时执行多个 |
简化写法 | 无 | $(document).ready(function(){ //.. }); 推荐写法: $(function(){ }); |
jQuery
有哪些功能(API
):
ajax
简单的JQuery
选择器:
JQuery
基本选择器(ID
选择器,标签选择器,类选择器,通配选择器和组选择器5
种)ID
选择器:document.getElementById(id)
与$("#id")
对比(改变文字大小)—id
唯一,返回单个元素document.getElementsByTagName(tagName)
与$("tagname")
对比—多个标签,返回数组$(".className")
–多个classname
(改变背景图片)document.getElementsByTagName("*")
与$("*")
对比—指范围内的所有标签元素$("seletor1,seletor2,seletor3")
—-无数量限制,用逗号分割JQuery
JQuery
是什么
javascript
用来干什么的:
DOM
对象css
jQuery
作用一样,只是更加快速简洁如何引用JQuery
1
2
3
4
5
6
7
8
|
<script type="text/javascript"></script>
写第一个JQUery案例
<script type=“text/javascript” src=“”></script>
<script type=“text/javascript”>
$(function(){
alert(“jQuery 你好!”);
});
</script>
|
$()讲解
$
在JQuery
库中,$
是JQuery
的别名,$()
等效于就jQuery()
.$()
是JQuery
方法,赞可看作是JQuery
的选择器,与css
选择器相似(可做对比)var jQuery==$ =function(){}
$()
本质就是一个函数也就是 jQuery
的核心函数jQuery
的对象都这样变量加上一个符号$
方便识别:var $div = $("#")
1
2
3
|
function $(id){
return document.getElementById(id);
}
|
$()
和document
是相等的吗
1
2
3
4
5
|
<div id="a" class="aa"></div>
<div id="b" class="aa"></div>
<div id="c" class="aa"></div>
alert(document.getElementById("id") == $("#aa"));//返回结果为false
alert(document.getElementById("id") == $("#aa").get(0));//返回true
|
代理对象$()
jQuery
中返回的是代理对象本身jQuery
的核心原理是通过选择器找到对应的代理对象jQuery
全都是通过方法操作$(".className")
$(".aa").css("color","green");
$("#a").css("background-color","#ff0066");
$("p").css("color","#cc3366");
$("#b ul li").size();
对象转换($(element)
)
dom
对象和jquery
代理对象的相互转换
1
2
3
4
5
|
$(传入的原生对象);
//原生对象转化成jQuery对象
var nav = document.getElementById("nav");
var $nav = $(nav);
alert($nav.get(0) == nav);//true
|
检索范围的限制($(‘字符串‘,element)
)
总结:三种写法对比:
方式一:不推荐 搜索速度最慢
$("#nav").css();
$("#nav li").css();
方式二:搜索速度最快 链式操作
$("#nav").css().children().css();
方式三:也常用 速度第二快
var $nav = $("#nav").css()
;$("li",$nav).css()
; $nav
限制了搜索范围 速度快总结: $()
jquery
核心方法的作用和使用场景
$(ul.nav")
html
标签)$("<img>")
–最终加到DOM
树中 $xx.append("<img>")
;element dom
对象,直接包装为proxy
对象返回 $(DOM对象)
element
dom
对象的话,那么就是在element
这个dom
对象里面寻找选择器对应的元素并且代理 $("li",$DOM对象)
CSS
常用的选择器选择器 | 语法 | 描述 |
---|---|---|
标签选择器 | E{css规则} |
以文档元素作为选择符 |
ID 选择器 |
#ID{css规则} |
ID 作为选择符 |
类选择器 | E.className{css规则} |
class 作为选择符 |
群组选择器 | E1,E2,E3{css规则} |
多个选择符应用同样的样式 |
后代选择器 | E F{css规则} |
元素E 的任意后代元素F |
选择器引擎规则($(‘字符串‘)
)
css
选择器的规则
id
选择器css3
的选择器规则
状态和伪类(:even
:odd
:first
:last
:eq(index)
)
[attr=value]
)DOM
的嵌套关系匹配元素
jQuery
层级选择器—-包含选择器、子选择器、相邻选择器、兄弟选择器4种$("a b")
在给定的祖先元素下匹配所有后代元素。(不受层级限制)$("parent > child")
在给定的父元素下匹配所有子元素。$("prev + next")
匹配所有紧接在prev
元素后的next
元素。$("prev ~ siblings")
匹配prev元素之后的所有sibling
元素。选择器 | 说明 | 返回 |
---|---|---|
:first |
匹配找到的第1个元素 | 单个元素 |
:last |
匹配找到的最后一个元素 | 单个元素 |
:eq |
匹配一个给定索引值的元素 | 单个元素 |
:even |
匹配所有索引值为偶数的元素 | 集合元素 |
: odd |
匹配所有索引值为奇数的元素 | 集合元素 |
:gt(index) |
匹配所有大于给定索引值的元素 | 集合元素 |
:lt(index) |
匹配所有小于给定索引值的元素 | 集合元素 |
:not |
去除所有与给定选择器匹配的元素 | 集合元素 |
:animated |
选取当前正在执行动画的所有元素 | 集合元素 |
focus |
选取当前正在获取焦点的元素 | 集合元素 |
选择器 | 描述 | 返回 |
---|---|---|
:contains(text) |
选取含有文本内容为text的元素 | 集合元素 |
:empty |
选取不包含子元素获取文本的空元素 | 集合元素 |
:has(selector) |
选择含有选择器所匹配的元素的元素 | 集合元素 |
:parent |
选取含有子元素或者文本的元素 | 集合元素 |
选择器 | 描述 | 返回 |
---|---|---|
:hidden |
选择所有不可见的元素 | 集合元素 |
:visible |
选取所有可见的元素 | 集合元素 |
选择器 | 说明 | 返回 |
---|---|---|
[attribute] |
选取拥有此属性的元素 | 集合元素 |
[attribute=value] |
选取属性值为value 值的元素 |
集合元素 |
[attribue^=value] |
选取属性的值以value 开始的元素 |
集合元素 |
[attribue$=value] |
选取属性的值以value 结束的元素 |
集合元素 |
选择器 | 说明 | 返回 |
---|---|---|
:nth-child(index/even/odd) |
选取每个父元素下的第index个子元素或者奇偶元素(index 从1 算起) |
集合元素 |
:first-child |
选取每个元素的第一个子元素 | 集合元素 |
:last-child |
选取每个元素的最后一个子元素 | 集合元素 |
:nth-child()
选择器是很常用的子元素过滤选择器,如下
:nth-child(even)
选择每个父元素下的索引值是偶数的元素:nth-child(odd)
选择每个父元素下的索引值是奇数的元素:nth-child(2)
选择每个父元素下的索引值是2
的元素:nth-child(3n)
选择每个父元素下的索引值是3的倍数的元素 (n
从1
开始)表单对象属性过滤选择器
选择器 | 说明 | 返回 |
---|---|---|
:enabled |
选取所有可用元素 | 集合元素 |
:disabled |
选取所有不可用元素 | 集合元素 |
:checked |
选取所有被选中的元素(单选框、复选框) | 集合元素 |
:selected |
选取所有被选中的元素(下拉列表) | 集合元素 |
选择器 | 说明 |
---|---|
:input |
选取所有input textarea select button 元素 |
:text |
选取所有单行文本框 |
:password |
选取所有密码框 |
:radio |
选取所有单选框 |
:checkbox |
选取所有多选框 |
:submit |
选取所有的提交按钮 |
:image |
选取所有的图像按钮 |
:reset |
选取所有的重置按钮 |
:button |
选取所有的按钮 |
:file |
选取所有的上传域 |
:hidden |
选取所有的不可见元素 |
特定位置选择器
:first
:last
:eq(index)
指定范围选择器
:even
:odd
:gt(index)
:lt(index)
排除选择器
:not
非使用合适的选择器表达式可以提高性能、增强语义并简化逻辑。常用的选择器中,ID
选择器速度最快,其次是类型选择器。
ID
选择器class
选择器jQuery
对象使用过滤器
jQuery
提供了2
种选择文档元素的方式:选择器和过滤器hasClass(className)
:判断当前jQuery
对象中的某个元素是否包含指定类名,包含返回true
,不包含返回false
eq(index)
:获取第N
个元素。index
是整数值,下标从0
开始filter(expr)/(fn)
:筛选出与指定表达式/函数匹配的元素集合。map(callback)
:将一组元素转换成其他数组not(expr)
:删除与指定表达式匹配的元素slice(start,end)
:选取一个匹配的子集查找
children()
:取得所有元素的所有子元素集合(子元素)find()
:搜索所有与指定表达式匹配的元素(所有后代元素中查找)siblings()
查找当前元素的兄弟代理对象属性和样式操作
attr
prop
(一般属性值是boolean
的值或者不用设置属性值,一般使用)css
(最好不用,一般我用来做测试)addClass
/ removeClass
操作原生DOM
的时候用的方式:一次只能操作一个
setAttribute
/ getAttribute
style.xx = value
className=‘‘
DOM
的子元素children
属性DOM
里面添加一个子元素appendChild()
操作jQuery
代理对象的时候:批量操作DOM
对象(全都是通过方法操作)
操作属性:attr()
、prop()
attr
和prop
区别:如果属性的值是布尔类型的值 用prop
操作 反之attr
操作样式:css()
addClass()
removeClass()
DOM
子元素:children()
append()
DOM
是一种与浏览器、平台|语言无关的接口,使用该接口可以轻松的访问 页面中的所有的标准组件
DOM
操作的分类
DOM Core
DOM core
并不专属于JavaScript
,任何支持DOM
的程序都可以使用JavaScript
中的getElementByID()
getElementsByTagName()
getAttribute()
setAttribute()
等方法都是DOM Core
的组成部分HTML-DOM
HTML -DOM
的出现比DOM-Core
还要早,它提供一些更简明的标志来描述HTML
元素的属性HTML-DOM
来获取某元素的src
属性的方法
element.src
CSS-DOM
CSS
的操作。在JavaScript
中,主要用于获取和设置style
对象的各种属性,通过改变style
对象的属性,使网页呈现不同的效果查找节点
attr()
可以获取各属性的值$(html)
:根据传递的标记字符串,创建DOM
对象方法 | 说明 |
---|---|
append() |
向每个匹配元素内部追加内容 |
appendTo() |
颠倒append() 的操作 |
prepend() |
向每个匹配元素的内容内部前置内容 |
prependTo() |
颠倒prepend() 的操作 |
after() |
向每个匹配元素之后插入内容 |
insertAfter() |
颠倒after() 的操作 |
before() |
在每个匹配元素之前插入内容 |
insertBefore() |
颠倒before() 的操作 |
删除节点
remove()
detach()
empty()
remove()方法
remove()
方法删除后,还是可以继续使用删除后的引用detach()
remove()
方法一样,也是从DOM
中去掉所有匹配的元素,与remove()
不同的是,所有绑定的事件、附加的数据等,都会被保留下来empty()
empty()
方法并不是删除节点,而是清空节点,它能清空元素中所有后代节点复制节点
clone()
方法来完成clone()
方法中传递一个参数true
,同时复制元素中所绑定的事件替换节点
jQuery
提供相应的方法 replaceWidth()
样式操作
attr()
addClass()
removeClass()
toggle()
方法只要是控制行为上的重复切换(如果元素是显示的,则隐藏;如果元素原来是隐藏的,则显示)toggleClass()
方法控制样式上的重复切换(如何类名存在,则删除它,如果类名不存在,则添加它)hasClass()
可以用来判断元素是否含有某个class
,如有返回true
该方法等价于is()
设置和获取HTML、文本和值
html()
JavaScript
中innerHTML
属性,可以用来读取和设置某个元素中的HTML
内容text()
方法
JavaScript
中innerHTML
,用来读取和设置某个元素中的文本内容val()
方法
JavaScript
中的value
属性,用来设置获取元素的值。无论是文本框、下拉列表还是单选框,都可以返回元素的值,如果元素多选,返回一个包含所有选择的值的数组遍历节点
children()
方法
childre()
方法只考虑子元素而不考虑其他后代元素next()
方法
prev()
方法
siblings()
方法
parent()
方法
parents()
方法
CSS DOM
技术简单的来说就是读取和设置style
对象的各种属性css()
方法获取元素的样式属性,可以同时设置多个样式属性CSS DOM
中关于元素定位有几个常用的方法
offset()
方法
top
和left
,他只对可见元素有效position()
方法
position()
样式属性设置为relative
或者absolute
的祖父节点的相对偏移,与offset()
一样,他返回的对象也包括两个属性,即top
和left
scrollTop()
方法和scrollLeft
方法
DOM
:Document Object Model
缩写,文档对象模型document.createElement(name)
;
1
2
|
var div = document.createElement("div");
document.body.appendChild(div);
|
$(html)
:根据传递的标记字符串,创建DOM对象
2.创建文本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
var div = document.createElement("div");
var txt = document.createTextNode("DOM");
div.appendChild(txt);
document.body.appendChild(div);
var $div = = $("<div>DOM</div>");
$(body).append($div);
```
- 3.设置属性
- 语法:`e.setAttrbute(name,value)`
```javascript
var div = document.createElement("div");
var txt = document.createTextNode("DOM");
div.appendChild(txt);
document.body.appendChild(div);
div.setAttribute("title","盒子");
var $div = = $("<div title=‘盒子‘>DOM</div>");
$(body).append($div);
|
内部插入
append()
:向每个匹配的元素内部追加内容appendTo()
:把所有匹配的元素追加到指定元素集合中,$("A").append("B")
等效 $("B").appendTo("A")
prepend()
:把每个匹配的元素内部前置内容prependTo()
:把所有匹配的元素前置到另一个指定的元素集合中,$("A").prepend("B")
等效 $("B").prependTo("A")
外部插入
after()
:在每个匹配的元素之后插入内容before()
:在每个匹配想元素之前插入内容insertAfter()
:将所有匹配的元素插入到另一个指定的元素集合后面,$A.insert($B)
等效$B.insertAfter($A);
insertBefore()
:将所有匹配的元素插入到另一个指定的元素集合前面 $A.before($B)
等效 $B.insertBefore($A)
;remove()
:从DOM
中删除所有匹配元素empty()
:删除匹配的元素集合中所有子节点内容clone()
clone(true)
则是包括克隆元素的属性,事件等replaceWith()
:将所有匹配的元素替换成指定的元素replaceAll()
:用匹配的元素替换掉指定元素$A.replaceAll($B)
等效于 $B.replaceWhith($A)
;JavaScrip
t语言本身不支持动画设计,必须通过改变CSS
来实现动画效果显隐动画
show()
:显示 hide()
:隐藏
hide()
通过改变元素的高度宽度和不透明度,直到这三个属性值到0
show()
从上到下增加元素的高度,从左到右增加元素宽度,从0
到1
增加透明度,直至内容完全可见show(speed,callback)
speed
: 字符串或数字,表示动画将运行多久(slow=0.6
/normal=0.4
/fast=0.2
)callback
: 动画完成时执行的方法显示和隐藏式一对密不可分的动画形式
显隐切换
toggle()
:切换元素的可见状态
display
设置为none
toggle(speed)
toggle(speed,callback)
toggle(boolean)
speed
: 字符串或数字,表示动画将运行多久(slow=0.6
/normal=0.4
/fast=0.2
)easing
: 使用哪个缓冲函数来过渡的字符串(linear
/swing
)callback
: 动画完成时执行的方法boolean
:true
为显示 false
为隐藏滑动
显隐滑动效果
slideDown()
:滑动隐藏slidUp()
:滑动显示
参数:
slideDown(speed,callback)
slidUp(speed,callback)
显隐切换滑动
slideToggle()
:显隐滑动切换slidUp(speed,callback)
渐变:通过改变不透明度
淡入淡出
fadeIn()
fadeOut()
参数:
fadeIn(speed,callback)
fadeOut(speed,callback)
设置淡出透明效果
fadeTo()
?:以渐进的方式调整到指定透明度
参数:
fadeTo(speed,opacity,callback)
渐变切换:结合fadeIn
和fadeOut
fadeToggle()
参数:
fadeOut(speed,callback)
animate()
animate
方法之前,为了影响该元素的top
left
bottom
right
样式属性,必须先把元素的position
样式设置为relative
或者absolute
stop()
语法结构:stop([clearQueue],[gotoEnd]);
stop()
方法,会立即停止当前正在进行的动画if(!$(element).is(":animated")){ //判断元素是否处于动画状态}
animate
动画中经常被用到,需要注意delay()
用animate
模拟show()
:
show
: 表示由透明到不透明toggle
: 切换hide
:表示由显示到隐藏动画方法总结
方法名 | 说明 |
---|---|
hide() 和show() |
同时修改多个样式属性即高度和宽度和不透明度 |
fadeIn() 和fadeOut() |
只改变不透明度 |
slideUp() 和slideDown() |
只改变高度 |
fadeTo() |
只改变不透明度 |
toggle() |
用来代替show() 和hide() 方法,所以会同时修改多个属性即高度、宽度和不透明度 |
slideToggle() |
用来代替slideUp 和slideDown() 方法,所以只能改变高度 |
fadeToggle() |
用来代替fadeIn() 和fadeOut 方法,只能改变不透明度 |
animate() |
属于自定义动画,以上各种动画方法都是调用了animate 方法。此外,用animate 方法还能自定义其他的样式属性,例如:left marginLeft ``scrollTop 等 |
事件对象的属性
event.type
:获取事件的类型event.target
:获取到触发事件的元素event.preventDefault
方法 阻止默认事件行为event.stopPropagation()
阻止事件的冒泡keyCode
:只针对于keypress
事件,获取键盘键数字 按下回车,13
event.pageX / event.pageY
获取到光标相对于页面的x
坐标和y
坐标
jQuery
,在IE浏览器中用event.x
/ event.y
;在Firefox
浏览器中用event.pageX
/ event.pageY
。如果页面上有滚动条还要加上滚动条的宽度和高度event.clientX
:光标对于浏览器窗口的水平坐标 浏览器
event.clientY
:光标对于浏览器窗口的垂直坐标
event.screenX
:光标对于电脑屏幕的水平坐标 电脑屏幕
event.screenY
:光标对于电脑屏幕的水平坐标event.which
该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键,在键盘事件中的按键 1
代表左键 2
代表中键 3
代表右键事件冒泡
jQuery
中提供了stopPropagation()
方法jQuery
中提供了preventDefault()
方法来阻止元素的默认行为JavaScript
来修复。jQuery
不支持事件捕获,如需要用事件捕获,要用原生的JavaScript
bind()
;绑定
为匹配元素绑定处理方法
需要给一个元素添加多个事件 ,事件执行一样时候
one()
:只执行一次分类 | 方法名称 | 说明 |
---|---|---|
页面载入 | ready(fn) |
当DOM 载入就绪可以绑定一个要执行的函数 |
事件绑定 | blind(type,[data],fn) |
为每个匹配元素的特定事件绑定一个事件处理函数 |
事件绑定 | unblind() |
解除绑定 |
事件绑定 | on(events,[,selector[,]data],handler) |
在选择元素上绑定一个或者多个事件处理函数 |
事件绑定 | off() |
移除on 绑定的事件 |
事件绑定 | delegate(selector,eventType,handler) |
为所有选择匹配元素附加一个或多个事件处理函数 |
事件绑定 | undelegate() |
移除绑定 |
事件动态 | live(type,fn) |
对动态生成的元素进行事件绑定 |
事件动态 | die(type,fn) |
移除live() 绑定的事件 |
交互事件 | hover() |
鼠标移入移出 |
交互事件 | toggle(fn1,fn2,[fn3],[fn4]) |
每单击后依次调用函数 |
交互事件 | blur(fn) |
触发每一个匹配元素的blur 事件 |
交互事件 | change() |
触发每一个匹配元素的change 事件 |
交互事件 | click() |
触发每一个匹配元素的click 事件 |
交互事件 | focus() |
触发每一个匹配元素的focus 事件 |
交互事件 | submit() |
触发每一个匹配元素的submit 事件 |
键盘事件 | keydown() |
触发每一个匹配元素的keydown 事件 |
键盘事件 | keypress() |
触发每一个匹配元素的keypress 事件 |
键盘事件 | keyup() |
触发每一个匹配元素的keyup事件 |
鼠标事件 | mousedown(fn) |
绑定一个处理函数 |
鼠标事件 | mouseenter(fn) |
绑定一个处理函数 |
键盘事件 | mouseleave(fn) |
绑定一个处理函数 |
键盘事件 | mouseout(fn) |
绑定一个处理函数 |
键盘事件 | mouseover(fn) |
绑定一个处理函数 |
窗口操作 | resize(fn) |
绑定一个处理函数 |
窗口操作 | scroll(fn) |
绑定一个处理函数 |
Asynchronous Javascript And XML
(异步的JavaScript
和XML
)Ajax
优势与不足
Ajax
优势
Ajax
下最大的有点,能在不刷新整个页面前提下更新数据web
程序的性能
Ajax
模式在性能上最大的区别在于传输数据的方式,在传统模式中,数据的提交时通过表单来实现的。Ajax
模式只是通过XMLHttpRequest
对象向服务器提交希望提交的数据,即按需发送Ajax
的工作原理相当于在用户和服务器之间加了一个中间层,似用户操作与服务器响应异步化。它在客户端创建Ajax
引擎,把传统方式下的一些服务器负担的工作转移到客户端,便于客户端资源来处理,减轻服务器和带宽的负担XMLHttpRequest
对象的支持度不足Ajax
的核心是XMLHttpRequest
对象,它是Ajax
实现的关键,发送异步请求、接受响应以及执行回调都是通过它来完成
创建ajax
对象 var xhr = new XMLHttpRequest();
准备发送请求
get
/ post
get
URL
后面encodeURI( ‘‘ )
;post
send()
里面,并且一定要规定数据格式form
表单中:
action
:
method
: (默认是get
)get
: 会在url
里面以 name=value
, 两个数据之间用 &
连接post
:enctype
: "application/x-www-form-urlencoded"
url
是否异步
false
):阻塞true
):非阻塞正式发送请求
ajax
请求处理过程
1
2
3
4
5
6
|
xhr.onreadystatechange = function(){
if (xhr.readyState == 4)
{
alert( xhr.responseText );
}
};
|
onreadystatechange
:当处理过程发生变化的时候执行下面的函数
readyState
:ajax
处理过程
open()
)。send()
)。responseText
:请求服务器返回的数据存在该属性里面
status
: http
状态码ajax
封装案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
//ajax请求后台数据
var btn = document.getElementsByTagName("input")[0];
btn.onclick = function(){
ajax({//json格式
type:"post",
url:"post.php",
data:"username=poetries&pwd=123456",
asyn:true,
success:function(data){
document.write(data);
}
});
}
//封装ajax
function ajax(aJson){
var ajx = null;
var type = aJson.type || "get";
var asyn = aJson.asyn || true;
var url = aJson.url; // url 接收 传输位置
var success = aJson.success;// success 接收 传输完成后的回调函数
var data = aJson.data || ‘‘;// data 接收需要附带传输的数据
if(window.XMLHttpRequest){//兼容处理
ajx = new XMLHttpRequest();//一般浏览器
}else
{
ajx = new ActiveXObject("Microsoft.XMLHTTP");//IE6+
}
if (type == "get" && data)
{
url +="/?"+data+"&"+Math.random();
}
//初始化ajax请求
ajx.open( type , url , asyn );
//规定传输数据的格式
ajx.setRequestHeader(‘content-type‘,‘application/x-www-form-urlencoded‘);
//发送ajax请求(包括post数据的传输)
type == "get" ?ajx.send():ajx.send(aJson.data);
//处理请求
ajx.onreadystatechange = function(aJson){
if(ajx.readState == 4){
if (ajx.status == 200 && ajx.status<300)//200是HTTP 请求成功的状态码
{
//请求成功处理数据
success && success(ajx.responseText);
}else{
alert("请求出错"+ajx.status);
}
}
};
|
jquery
对Ajax
操作进行了封装,在jquery
中的$.ajax()
方法属于最底层的方法,第2
层是load()
、$.get()
、$.post();
第3
层是$.getScript()
、$.getJSON()
,第2
层使用频率很高
load()
方法load()
方法是jquery
中最简单和常用的ajax
方法,能载入远程HTML
代码并插入DOM
中 结构为:load(url,[data],[callback])
url
参数指定选择符可以加载页面内的某些元素 load
方法中url
语法:url selector
注意:url
和选择器之间有一个空格load()
方法的传递方式根据参数data
来自动指定,如果没有参数传递,则采用GET
方式传递,反之,采用POST
XMLHttpRequest
对象
1
2
3
4
5
|
$("#testTest").load("test.html",function(responseText,textStatus,XMLHttpRequest){
//respnoseText 请求返回的内容
//textStatus 请求状态 :sucess、error、notmodified、timeout
//XMLHttpRequest
})
|
参数名称 | 类型 | 说明 |
---|---|---|
url |
String |
请求HTML 页面的URL 地址 |
data(可选) |
Object |
发送至服务器的key / value 数据 |
callback(可选) |
Function |
请求完成时的回调函数,无论是请求成功还是失败 |
load()
方法通常用来从web服务器上获取静态的数据文件。在项目中需要传递一些参数给服务器中的页面,那么可以使用$.get()
和$.post()
或$.ajax()
方法
注意:$.get()
和$.post()
方法是jquery
中的全局函数
$.get()方法
$.get()
方法使用GET
方式来进行异步请求$.get(url,[data],callback,type)
xml
文档,需要在服务器端设置Content-Type
类型 代码如下:header("Content-Type:text/xml:charset=utf-8")
//php
$.get()
方法参数解析参数 | 类型 | 说明 |
---|---|---|
url |
String |
请求HTML 页的地址 |
data(可选) |
Object |
发送至服务器的key / value 数据会作为QueryString 附加到请求URL中 |
callback(可选) |
Function |
载入成功的回调函数(只有当Response 的返回状态是success才调用该方法) |
type(可选) |
String |
服务器返回内容的格式,包括xml 、html 、script 、json 、text 和_default |
$.post()方法
$.get()
方法的结构和使用方式相同,有如下区别
GET
请求会将参数跟张乃URL后进行传递,而POST
请求则是作为Http
消息的实体内容发送给web服务器,在ajax
请求中,这种区别对用户不可见
GET
方式对传输数据有大小限制(通常不能大于2KB
),而使用POST
方式传递的数据量要比GET
方式大得多(理论不受限制)GET
方式请求的数据会被浏览器缓存起来,因此其他人可以从浏览器的历史纪录中读取这些数据,如:账号、密码。在某种情况下,GET
方式会带来严重的安全问题,而POST
相对来说可以避免这些问题GET
和POST
方式传递的数据在服务端的获取也不相同。在PHP
中,GET
方式用$_GET[]
获取;POST
方式用$_POST[]
获取;两种方式都可用$_REQUEST[]
来获取总结
load()
、$.get()
和$.post()
方法完成了一些常规的Ajax
程序,如果还需要复杂的Ajax
程序,就需要用到$.ajax()
方式$.ajax()
方法是jquery
最底层的Ajax
实现,它的结构为$.ajax(options)
$.ajax()
方式所需要的请求设置以及回调函等信息,参数以key
/ value
存在,所有参数都是可选的参数 | 类型 | 说明 |
---|---|---|
url |
String |
(默认为当前页地址)发送请求的地址 |
type |
String |
请求方式(POST 或GET )默认为GET |
timeout |
Number |
设置请求超时时间(毫秒) |
dataType |
String |
预期服务器返回的类型。可用的类型如下 xml:返回 XML 文档,可用jquery 处理html:返回纯文本的 HTML 信息,包含的script 标签也会在插入DOM 时执行script:返回纯文本的 javascript 代码。不会自动缓存结果,除非设置cache 参数。注意:在远程请求时,所有的POST 请求都将转为GET 请求json:返回 JSON 数据jsonp: JSONP 格式,使用jsonp 形式调用函数时,例如:myurl?call back=?,jquery 将自动替换后一个? 为正确的函数名,以执行回调函数text:返回纯文本字符串 |
beforeSend |
Function |
发送请求前可以修改XMLHttpRequest 对象的函数,例如添加自定义HTTP 头。在beforeSend 中如果返回false 可以取消本次Ajax 请求。XMLHttpRequest 对象是唯一的参数function(XMLHttpRequest){ this ;//调用本次Ajax 请求时传递的options 参数} |
complete |
Function |
请求完成后的回调函数(请求成功或失败时都调用) 参数: XMLHttpRequest 对象和一个描述成功请求类型的字符串function(XMLHttpRequest,textStatus){ this ;//调用本次Ajax请求时传递的options 参数} |
success |
Function |
请求成功后调用的回调函数,有两个参数 (1)由服务器返回,并根据 dataTyppe 参数进行处理后的数据(2)描述状态的字符串 function (data,textStatus){// data 可能是xmlDoc、``jsonObj 、html 、text 等this ;//调用本次Ajax 请求时传递的options 参数} |
error |
Function |
请求失败时被调用的函数 |
global |
Boolean |
默认为true 。表示是否触发全局Ajax 事件,设置为false 将不会触发。AjaxStart 或AjaxStop 可用于控制各种Ajax 事件 |
什么是插件
Plugin
)也称为jQuery
的扩展。以jQuery
核心代码为基础编写的符合一定规范的应用程序。通过js
文件的方式引用。插件分为哪几类
UI
类、表单及验证类、输入类、特效类、Ajax
类、滑动类、图形图像类、导航类、综合工具类、动画类等等jquery.js
文件,而且在所以插件之前引入如何自定义插件:
find()
)自定义插件的规范(解决各种插件的冲突和错误,增加成功率)
jquery.插件名.js
jquery.fn
对象上面,所有新功能附加在jquery
上$
,如果要使用,请传递jQuery
($
并不是总等于jQuery
,另外其他js
框架也可能使用$
)this
应该指向jQuery
对象this.each()
迭代元素自定义插件案例
jQuery
提供了 jQuery.extend()
和 jQuery.fn.extend()
jQuery.extend()
:创建工具函数或者是选择器jQuery.fn.extend()
:创建jQuery
对象命令 (fn
相当于prototype
的别名)jQuery
官方提供的插件开发模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
;(function($){
$.fn.plugin=function(options){
var defaults = {
//各种参数 各种属性
}
var options = $.extend(defaults,options);
this.each(function(){
//实现功能的代码
});
return this;
}
})(jQuery);
|
自定义jQuery
函数:
1
2
3
4
5
6
7
|
(function($){
$.extend({
test: function(){
alert("hello plugin");
}
})
})(jQuery);
|
自定义jQuery
命令:
1
2
3
4
5
6
7
|
(function($){
$.fn.extend({
say : function(){
alert("hello plugin");
}
})
})(jQuery);
|
1
2
3
4
5
6
|
(function($){
$.fn.say = function(){
alert("hello plugin");
};
})(jQuery);
|
jQuery1.3
新增常用的方法方法 | 说明 |
---|---|
.closest() |
从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素 |
die() |
从元素中删除先前用live() 方法绑定的所有的事件 |
live() |
附加一个事件处理器到符合目前选择器的所有元素匹配 |
jQuery1.4
新增常用的方法方法 | 说明 |
---|---|
.first() |
获取集合中第一个元素 |
last() |
获取集合中最后一个元素 |
has(selector) |
保留包含特定后代的元素,去掉那些不含有指定后代的元素 |
detach() |
从DOM 中去掉所有匹配的元素。detach() 和remov() 一样,除了detach() 保存了所有jquery 数据和被移走的元素相关联。当需要移走一个元素,不久又将该元素插入DOM 时,这种方法很有用 |
delegate() |
为所有选择器匹配的元素附加一个处理一个或多个事件 |
undelegate() |
为所有选择器匹配的元素删除一个处理一个或多个事件 |
jQuery1.6
新增常用的方法方法 | 说明 |
---|---|
prop(proptyName) |
获取在匹配元素集合中的第一个元素的属性值 |
removeProp(proptyName,value) |
为匹配的元素删除设置的属性 |
:focus |
选择当前获取焦点的元素 |
性能优化
$(#id)
id
来定位DOM
元素是最佳的方式,为了提高性能,建议从最近的ID
元素开始往下搜索$("p")
, $("div")
, $("input")
jQuery
将直接调用本地方法document.getElementsByTagName()
来定位DOM
元素$(".class")
$("[attribute=value]")
DOM
元素,本地JavaScript
并没有直接实现。这种方式性能并不是很理想。建议避免使用。$(":hidden")
DOM
方式类似,建议尽量不要使用ID
选择器jQuery
对象,你可以把他们缓存在全局环境中jQuery
对象
jQuery
选择器获取的结果是一个jQuery
对象。在性能方面,建议使用for
或while
循环来处理,而不是$.each()
JavaScript
事件(如:click
、mouseove
r)都会冒泡到父级节点。当我们需要给多个元素调用同个函数时这点很有用。比如,我们要为一个表单绑定这样的行为:点击td后,把背景颜色设置为红色
$("#myTable td").click(function(){$(this).css("background","red");});
100
个td
元素,在使用以上的方式时,绑定了100
个事件,将带来性能影响event.target
获取到点击的当前元素
$("#myTable td").click(function({$(e.target).css("background","red")});
e.target
捕捉到触发的目标jQuery1.7
中提供了一个新的方法on()
,来帮助你将整个事件监听封装到一个便利的方法中
$("#myTable td").on("click",‘td‘,function(){$(this).css("background","red");});
使用join()方法来拼接字符串
+
来拼接字符串,现在可以改了。它确实有助于性能优化,尤其是长字符串处理的时候合理使用HTML5和Data属性
HTML5
的data
属性可以帮助我们插入数据,特别是后端的数据交换。jQuery
的Data()
方法有效利用HTML5
的属性
<div id="dl" data-role="page" data-list-value="43" data-options=‘{"name:""John"}‘>
$("#dl‘).data("role‘;//page)
$("#dl‘).data("lastValue‘;//43)
$("#dl‘).data("options‘;//john)
尽量使用原生的JavaScript方法
Gzip
;另一方面去除JavaScript
文件里面的注释、空白
1
2
3
4
5
|
$(document).ready(functuion(){
$(document).bind("contextmenu",function(e){
return false;
});
});
|
1
2
3
4
5
6
7
8
9
10
11
|
$(document).ready(function(){
//例子1:href="http://"的链接将会在新窗口打开链接
$(‘a[href=^="http://"]‘).attr("target","_blank");
//例子2:rel="external"的超链接将会在新窗口打开链接
$("a[rel$=‘external‘]").click(function(){
this.target = "_blank";
});
});
//use
<a href="http://baidu.com" rel="external">open</a>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
$(document).reday(function(){
//Firefox2 and above
if( $.browser.mozilla && $.browser.version>="1.8"){
//do something
}
// Safari
if($.browser.safari){
//do something
}
// Chrome
if($.browser.chrome){
//do something
}
// Opera
if($.browser.opera){
//do something
}
})
// IE6 and blow
if($.browser.msie && $.browser.version<=6){
//do something
}
// anything above IE6
if($.browser.msie && $.browser.version > 6){
//do something
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$(document).ready(function(){
$("input.text1").val("Enter you search text here");
textFill($(‘input.text1‘));
});
function textFill(input){//input focus text function
var originvalue = input.val();
input.focus(funtion(){
if($.trim(input.val())== originvalue){
input.val(‘ ‘);
}
}).blur(function(){
if($.trim(input.val()) == ‘ ‘){
input.val(originalvalue);
}
})
}
|
1
2
3
4
5
6
|
$(document).ready(function(){
$(document).mousemove(function(e){
$("#XY").html("X:" + e.pageX+ "| Y" + e.pageY);
});
});
|
1
2
3
4
5
|
$(document).ready(function(){
if($("#id").length){
// do some thing
}
})
|
1
2
3
4
5
6
7
|
$("div").click(function(){
window.location = $(this).find("a").attr("href");
})
//use
<div><a href="index.html">home</a></div>
|
1
2
3
4
5
6
7
8
9
10
11
|
$(document).ready(function(){
jQuery.fn.center = function(){
this.css("position","absolute");
this.css("top",($(window).height() - this.lenght()) / 2 +$(window).scrollTop() + "px");
this.css("left",($(window).height() - this.lenght()) / 2 +$(window).scrollLeft() + "px");
return this;
}
//use
$("#XY").center();
});
|
1
2
3
|
$(document).ready(function(){
jQuery.fx.off = true;
});
|
1
2
3
4
5
|
$(document).ready(function(){
$("#xy").mousedown(function(e){
alert(e.which);//1 = 鼠标左键 2= 鼠标中间 3 = 鼠标右键
});
});
|
1
2
3
4
5
6
7
|
$(document).ready(function(){
$("input").keyup(function(e){
if(e.which == "13"){
alert("回车提交");
}
})
});
|
1
2
3
4
5
6
7
8
|
$("#load").ajaxStart(function(){
showLoading();//显示loading
disableButtons() //禁用按钮
})
$("#load").ajaxComplete(function(){
hideLoading();//隐藏loading
enableButtons();//启用按钮
})
|
1
2
|
$("#someElement").find(‘option:selected‘);
$("#someElement option:selected");
|
1
2
3
4
5
|
var tog = false;
$("button").click(function(){
$("input[type=checkbox]‘).attr("checked",!tog);
tog = !tog;
});
|
1
2
3
4
5
|
$(document).ready(function(){
$("a[href$=‘pdf‘]").addClass("pdf");
$("a[href$=‘zip‘]").addClass("zip");
$("a[href$=‘psd‘]").addClass("psd");
});
|
1
2
3
4
5
6
|
setTimeOut(function(){
$("div").fadeIn(400);
},3000);
//而在1.4之后的版本可以用delay()来实现
$("div").slideUp(300).delay(3000).fadeIn(400);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//为table里面的td元素绑定click事件,不管td是一直存在还是动态创建的
//jQuery 1.4.2之前使用这种方式
$("table").each(function(){
$("td",this).live("click",function(){
$(this).toggleClass("hover");
});
});
//jquery 1.4.2使用的方式
$("table").delegate("td","click",function(){
$(this).toggleClass("hover");
});
//jQuery1.7.1使用的方式
$("table").on("click","td",function(){
$(this).toggleClass("hover");
})
|
1
2
3
4
5
6
7
8
9
10
11
12
|
(function($) {
var cache = [];
// Arguments are image paths relative to the current page.
$.preLoadImages = function() {
var args_len = arguments.length;
for (var i = args_len; i--;) {
var cacheImage = document.createElement(‘img‘);
cacheImage.src = arguments[i];
cache.push(cacheImage);
}
}
jQuery.preLoadImages("image1.gif", "/path/to/image2.png");
|
1
2
3
4
5
6
7
8
9
10
11
|
var scr = document.createElement(‘script‘);
scr.setAttribute(‘src‘, ‘https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js‘);
document.body.appendChild(scr);
scr.onload = function(){
$(‘div‘).attr(‘class‘, ‘‘).attr(‘id‘, ‘‘).css({
‘margin‘ : 0,
‘padding‘ : 0,
‘width‘: ‘100%‘,
‘clear‘:‘both‘
});
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$(window).bind("load", function() {
// IMAGE RESIZE
$(‘#product_cat_list img‘).each(function() {
var maxWidth = 120;
var maxHeight = 120;
var ratio = 0;
var width = $(this).width();
var height = $(this).height();
if(width > maxWidth){
ratio = maxWidth / width;
$(this).css("width", maxWidth);
$(this).css("height", height * ratio);
height = height * ratio;
}
var width = $(this).width();
var height = $(this).height();
if(height > maxHeight){
ratio = maxHeight / height;
$(this).css("height", maxHeight);
$(this).css("width", width * ratio);
width = width * ratio;
}
});
//$("#contentpage img").show();
// IMAGE RESIZE
});
|
1
2
3
4
5
6
7
8
|
// Back To Top
$(document).ready(function(){
$(‘.top‘).click(function() {
$(document).scrollTo(0,500);
});
});
//Create a link defined with the class .top
<a href="#" class="top">Back To Top</a>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var accordion = {
init: function(){
var $container = $(‘#accordion‘);
$container.find(‘li:not(:first) .details‘).hide();
$container.find(‘li:first‘).addClass(‘active‘);
$container.on(‘click‘,‘li a‘,function(e){
e.preventDefault();
var $this = $(this).parents(‘li‘);
if($this.hasClass(‘active‘)){
if($(‘.details‘).is(‘:visible‘)) {
$this.find(‘.details‘).slideUp();
} else {
$this.find(‘.details‘).slideDown();
}
} else {
$container.find(‘li.active .details‘).slideUp();
$container.find(‘li‘).removeClass(‘active‘);
$this.addClass(‘active‘);
$this.find(‘.details‘).slideDown();
}
});
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$(function(){
$("select#ctlJob").change(function(){
$.getJSON("/select.php",{id: $(this).val(), ajax: ‘true‘}, function(j){
var options = ‘‘;
for (var i = 0; i < j.length; i++) {
options += ‘
‘ + j[i].optionDisplay + ‘
‘;
}
$("select#ctlPerson").html(options);
})
})
})
|
1
2
3
4
5
6
7
8
|
// Safe Snippet
$("img").error(function () {
$(this).unbind("error").attr("src", "missing_image.gif");
});
// Persistent Snipper
$("img").error(function () {
$(this).attr("src", "missing_image.gif");
});
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$(document).ready(function() {
$(‘form‘).submit(function() {
if(typeof jQuery.data(this, "disabledOnSubmit") == ‘undefined‘) {
jQuery.data(this, "disabledOnSubmit", { submited: true });
$(‘input[type=submit], input[type=button]‘, this).each(function() {
$(this).attr("disabled", "disabled");
});
return true;
}
else
{
return false;
}
});
});
|
1
2
3
4
5
|
//change event on password1 field to prompt new input
$(‘#password1‘).change(function() {
//dynamically create new input and insert after password1
$("#password1").append("");
});
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var loading = false;
$(window).scroll(function(){
if((($(window).scrollTop()+$(window).height())+250)>=$(document).height()){
if(loading == false){
loading = true;
$(‘#loadingbar‘).css("display","block");
$.get("load.php?start="+$(‘#loaded_max‘).val(), function(loaded){
$(‘body‘).append(loaded);
$(‘#loaded_max‘).val(parseInt($(‘#loaded_max‘).val())+50);
$(‘#loadingbar‘).css("display","none");
loading = false;
});
}
}
});
$(document).ready(function() {
$(‘#loaded_max‘).val(50);
});
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<ul id=‘nav‘>
<li>导航一</li>
<li>导航二</li>
<li>导航三</li>
</ul>
//注意:代码需要修饰完善
$(‘#nav‘).click(function(e) {
// 要知道siblings的使用
$(e.target).addClass(‘tclass‘).siblings(‘.tclass‘).removeClass(‘tclass‘);;
});
|
jQuery
, prototype
共存,$
全局变量冲突问题
1
2
3
4
5
|
<script src="prototype.js"></script>
<script src="http://blogbeta.blueidea.com/jquery.js"></script>
<script type="text/javascript"> jQuery.noConflict();</script>
注意:一定要先引入prototype.js 再引入jquery.js,先后顺序不可错
|
1
2
3
4
5
|
//jQuery event封装支持判断元素上是否绑定了事件,此方法只适用于jQuery绑定的事件
var $events = $("#foo").data("events");
if( $events && $events["click"] ){
//your code
}
|
toggleClass
1
2
3
4
5
|
//切换(toggle)类允许你根据某个类的//是否存在来添加或是删除该类。
//这种情况下有些开发者使用:
a.hasClass(‘blueButton‘) ? a.removeClass(‘blueButton‘) : a.addClass(‘blueButton‘);
//toggleClass允许你使用下面的语句来很容易地做到这一点
a.toggleClass(‘blueButton‘);
|
1
2
3
|
if ($.browser.msie) {
// Internet Explorer就是个虐待狂
}
|
1
2
3
4
5
6
7
8
|
// 方法一
if (! $(‘#keks‘).html()) {
//什么都没有找到;
}
// 方法二
if ($(‘#keks‘).is(":empty")) {
//什么都没有找到;
}
|
1
2
3
|
var iFrameDOM = $("iframe#someID").contents();
//然后,就可以通过find方法来遍历获取iFrame中的元素了
iFrameDOM.find(".message").slideUp();
|
JQuery
1
2
3
4
5
6
7
|
$("#searchbox") .focus(function(){
$(this).val(‘‘)
}) .blur(function(){
var $this = $(this);
// ‘请搜索...‘为搜索框默认值
($this.val() === ‘‘)? $this.val(‘请搜索...‘) : null;
});
|
web
性能,有更新时我们通常不会加载整个页面,而只是仅仅更新部分页面内容,如图片的延迟加载等。页面部分刷新的特效在JQuery
中也很容易实现
1
2
3
4
|
setInterval(function() {
//每隔5秒钟刷新页面内容 //获取的内容将增加到 id为content的元素后
$("#content").load(url); }, 5000);
|
JQuery
,$
是最常用的变量名,但JQuery
并不是唯一一个使用$
作为变量名的库,为了避免命名冲突,你可以按照下面方式来组织你的代码
1
2
3
4
5
6
7
8
|
//方法一: 为JQuery重新命名为
$jvar $j = jQuery.noConflict();$j(‘#id‘).... //
方法二: 推荐使用的方式
(function($){ $(document).ready(function(){
//这儿,你可以正常的使用JQuery语法 });
})(jQuery);
|
1
|
<input type="password" name="pass" id="pass" /> <span id="passstrength"></span>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//下面的正则表达式建议各位收藏哦,项目上有可能会用得着
$(‘#pass‘).keyup(function(e) {
//密码为八位及以上并且字母数字特殊字符三项都包括
var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
//密码为七位及以上并且字母、数字、特殊字符三项中有两项,强度是中等
var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
var enoughRegex = new RegExp("(?=.{6,}).*", "g");
if (false == enoughRegex.test($(this).val())) {
$(‘#passstrength‘).html(‘More Characters‘); }
else if (strongRegex.test($(this).val())) {
$(‘#passstrength‘).className = ‘ok‘;
$(‘#passstrength‘).html(‘Strong!‘); }
else if (mediumRegex.test($(this).val())) {
$(‘#passstrength‘).className = ‘alert‘;
$(‘#passstrength‘).html(‘Medium!‘); }
else {
$(‘#passstrength‘).className = ‘error‘;
$(‘#passstrength‘).html(‘Weak!‘);
}
return true;
});
|
jQuery
插件
jQuery
标签:onclick argument tor prompt err 交换 安全 一段 参数
原文地址:http://www.cnblogs.com/ys-wuhan/p/6195310.html