jQuery笔记

一、jQuery 基础

jQuery 是一个 JS 函数库(write less, do more),封装了 BOM 和 DOM 的一些函数、对象、方法等,如 CRUD(增删改查)、Ajax,使用 jQuery 的网站超过 90%,jQuery 是中大型 WEB 项目开发首选

1、jQuery 的用途

HTML 元素选择(选择器)(方便快速查找 DOM 元素)

HTML 元素操作(如增删改)

CSS 操作

HTML 事件处理

JS 动画效果

链式调用(如 a().b().c())(通过在方法或函数(除了获取数据的方法)中最后返回 this(jQuery 对象),来实现可链式调用)

读写合一(方法中不传参表示读,传参表示写),若 jQuery 对象中包含多个 dom 元素,则统一读时只读第一个,写时是对所有元素写

隐式遍历($(‘#box>li’).click(function(){}) 会对 box 下所有 li 加监听)

浏览器兼容

易扩展插件

ajax 封装

……

2、jQuery 的不同版本

1.x:用的最多,因为兼容老版本 IE,文件更大

2.x:部分 IE8 及以下不支持,文件小,执行效率更高

3.x:完全不再支持 IE8 及以下版本,提供了一些新的 API,提供不包含 ajax/动画 API 的版本

两种 js 库库文件:.js 和 .min.js

.js 文件是开发版(测试版)

.min.js 文件是生产版(压缩版),去掉空格、换行,并把变量都转成单个字母的形式

3、引入 jQuery

jQuery 库的大体结构如下

(functon(window){
    var jQuery = function(){
        return new jQuery.fn.init(xxx)
    }
    window.$ = window.jQuery = jQuery
})(window)

引入 jQuery 后相当于给 window 添加了两个属性 window.jQuery 和 window.$,两个的含义相同,表示的是一个函数,并且调用 jQuery 库返回的是一个对象

有两种引入 jQuery 的方式:服务器本地库引入、CDN 远程库引入

服务器本地库引入是把 jQuery 库文件保存在服务器中的文件夹下,使用 <script type="type/javascript" src="./jquery-1.12.13.js"></script> 引入 jQuery

CDN 远程库在项目上线时,一般使用比较靠谱的 CDN 资源库,减轻服务器负担,如免费的 CDN 资源库 bootcdn

4、使用 jQuery

把 jQuery 函数 当作函数使用 $(xxxx),把 jQuery 函数当作对象使用 $.xxx(),如 $.each,$.trim

jQuery 函数是 jQuery 库向外暴露的,直接可用,而 jQuery 对象是执行 jQuery 函数产生的

jQuery 对象($xxx)包含所有匹配的 n 个 DOM 元素的伪数组对象,是执行 $() 返回的就是 jQuery 对象

(1)jQuery 核心函数($/jQuery)

jQuery 库向外直接暴露的就是 jQuery 函数 $/jQuery,引入 jQuery 库后,直接使用即可

jQuery === $   //true 

参数类型:

1)参数为函数:当 DOM 加载完成后,执行此回调函数

$(function(){})  //绑定文档加载完成的监听

2)参数为选择器字符串:查找所有匹配的标签,并将它们封装成 jQuery 对象

$('#btn').click(function(){})  //绑定点击事件监听,在回调函数中的 this 依然指向发生事件的 dom 元素 <button>

3)参数为 DOM 对象:将 DOM 对象封装成 jQuery 对象

$('#btn').click(function(){   //绑定点击事件监听,在回调函数中的 this 依然指向发生事件的 dom 元素 <button>
    alert($(this).html())  //参数为 DOM 对象,封装成 jQuery 对象后就可以调用 jQuery 的方法
})  

4)参数为 html 标签字符串:创建标签对象并封装成 jQuery 对象

$('<input type="text">').appendTo("div")  //把 <input> 插入 <div> 中

(2)jQuery 核心对象

执行 jQuery 函数 $() 返回的对象为 jQuery (核心)对象,一般名称前会加 $,通过 $obj.xxx() 使用

var $btn = $('#btn')

jQuery 对象内部包含的是 DOM 元素对象(一个或多个)的伪数组对象(能获取 length 且可用下标访问的对象)

jQuery 对象拥有很多有用的属性和方法,让程序员能方便地操作 dom

jQuery 对象的属性和方法

1)基本行为

lengthsize(),返回 jQuery 对象内包含的 dom 元素的个数

[index]get(index),返回的是对应位置的 dom 元素

each(),遍历 jQuery 对象内包含的 dom 元素,如下

$.each(数组,function(index,item){})数组.each(function(index,item){}) 隐式遍历数组,回调函数中第一个参数为数组中元素下标,第二个参数为遍历的数组中的当前元素

index(),得到在所在兄弟元素中的下标

var $buttons = $('button')
$buttons.each(function(index,domEle){
    console.log(index,domEle.innerHTML)
    console.log(this)  //this 表示数组中当前 dom 元素对象 domEle
})

$('#btn3').index()  //第三个按钮是所有按钮中的第几个

2)属性

操作内部标签的属性或值

3)CSS

操作标签的样式

4)文档

对标签进行增删改操作

5)筛选

根据指定的规则过滤内部的标签

6)事件

处理事件监听相关

7)效果

实现一些动画效果

二、jQuery 函数

1、选择器

选择器本身只是一个有特定语法规则的字符串,没有实质用处

它的基本语法规则使用的就是 CSS 的选择器语法,并对其进行了扩展

只有调用 $(),并将选择器作为参数传入才能起作用

$(选择器) 的作用:根据选择器规则在整个文档中查找所有匹配的标签的数组,并封装成 jQuery 对象返回

选择器分类:基本选择器、层次选择器、过滤选择器、表单选择器

(1)基本选择器

基本选择器是最常用的选择器

#idelement.类*选择器1,选择器2,选择器n选择器1选择器2选择器n

$('#div1').css('background','red')
或
$('#div1').css({'background':'red'})

(2)层次选择器

层次选择器用于查找子元素、后代元素、兄弟元素

祖先元素 后代元素父元素 > 子元素兄元素 + 弟元素(兄元素后紧跟着的某类型弟元素),兄元素 ~ 弟元素们(兄元素后所有的某类型弟元素)

(3)过滤选择器

过滤选择器是在原有选择器匹配的元素中进一步进行过滤,既不是找子元素也不是找兄弟元素

多个过滤选择器不是同时执行,而是依次执行

:first 第一个

:last 最后一个

:eq(index) 根据下标找出某个

:not(selector) 排除某些

:lt 下标小于

:gt 下标大于

:odd 奇数元素

:even 偶数元素

:hidden 隐藏

:visible 显示

[属性名] 某个属性

[属性名=属性值] 某属性为某值的元素

$('div:not(.box)').css('background','red')  //选择所有 class 属性不为 box 的div(这里包含没有 class 属性的元素)
$('li:lt(3):gt(0)').css('background','red')  //选择第二个和第三个 li 元素
$('li:gt(0):lt(3)').css('background','red')  //这里选出来是第二三四个 li 元素,而不是第二个和第三个 li 元素,因为先执行 :gt(0),在选出的元素里再执行 :lt(3)
$('li:contains('xxx')').css('background','red')  //选择内容为 xxx 的 li 元素
$('li:hidden').length  //选择隐藏的 li 个数
$('li:hidden').length[0]  //选择第一个隐藏的 li
$('li[title]').css('background','red')  //选择有 title 属性的 li
$('li[title=xxx]').css('background','red')  //选择有title 属性值为 xxx 的 li

(4)表单选择器

:input 所有表单项,包括 <select>

:text:checkbox:radio:checked(选中的项)

$(':text:disabled').css('background','red')  //选择不可用的文本输入框
$(':checkbox:checked').length  //多选框选择的个数
$(':submit')  //提交按钮
$('select>option:selected').html()  //所选下拉框的文本内容
$('select').val()  //所选下拉框 option 的 value 属性值

表单

表单对象属性

2、$工具(把 jQuery 函数当对象使用)

$.each() 遍历数组或对象中的数据

$.each(数组,function(index,item){}) 隐式遍历数组,回调函数中第一个参数为数组中元素下标,第二个参数为遍历的数组中的当前元素

$.each(对象,function(key,value){})  //遍历对象

$.trim() 去除字符串两边的空格

$.trim(字符串) 去除两端的空格,和字符串本身的方法 `字符串.trim()` 效果相同

$.type(obj) 得到数据的类型

$.type($)  //返回 'function'

$.isArray(obj) 判断是否是数组

$.isArray($('body'))  //false

$.isFunction(obj) 判断是否是函数

$.isFunction($)  //true

$.parseJSON(json) 解析 json 字符串转换为 js 对象/数组

var json = '{"nsme":"xxx",age:12}'  //其中 json 对象就是 {}
$.parseJSON(json)  //json 对象转为 js 对象,返回 js 对象
var json = '[{"nsme":"xxx",age:12},{"nsme":"yyy",age:10}]'  //其中 json 数组就是 []
$.parseJSON(json)  //json 对象转为 js 数组,返回 js 数组

3、属性

操作标签的属性、标签体文本

attr('属性名')attr('属性名','属性值'):读写非布尔值的标签属性或自定义属性

prop('属性名')prop('属性名',属性值) 读写布尔值的标签属性或标签的固有属性

removeAttr('属性名')removeProp('属性名') 删除属性

addClass('class值') 添加 class 属性值

removeClass('class值') 移除指定 class 值

html()html('xxx') 读写标签体文本

val()val('xxx'):读写标签的 value

$(':text').val() 得到输入框 的文本

$(':text').val('xxx') 设置输入框 的文本

$('div:first').attr('title')
$('div').attr('name','xxx')
$('div').addClass('class值')
$('div').removeClass('xxx')  //移除所有 div 的 class 为 xxx 的 class
$('li:first').html('<h1>xxx</h1>')  //设置第一个 li 的标签体为 <h1xxx</h1>
$('div').removeClass('xxx')

attr 和 prop 的区别

(1)prop 多用在标签的固有属性、布尔值属性上,如 a 标签的 href,class,selected,checked 等

(2)attr 多用在自定义属性上

(3)jQuery 中用 attr 获取布尔值属性,且布尔值属性在标签体内没有定义的时候会得到 undefined

三、jQuery 对象

1、CSS

设置 style 样式

jQuery对象.css('属性')jQuery对象.css('属性','值')jQuery对象.css({多个样式对}):读写样式,返回的仍然是当前的 jQuery 对象,方法最后返回的是 this

位置

offset():获取相对于页面左上角的位置,返回的对象包含 top 和 left 两个整数,该方法只对可见元素有效,(读)

offset({top:xx,left:xx}):设置相对于页面左上角的位置(写)

position():获取相对于父元素左上角的位置,返回的对象包含 top 和 left 两个整数,(只能读)

scrollTop():读取/设置滚动条的 Y 坐标

$(document.body).scrollTop()+$(document.documentElement).scrollTop():读取页面滚动条的 Y 坐标(兼容 chrome 和 IE)

$('html,body').scrollTop(60):滚动到指定位置(兼容 chrome 和 IE)

滚动条回到顶部的例子

//瞬间回到顶部
$('#btn').click(function(){
    $(html,body).scrollTop(0)
})

//平滑地回到顶部
$('#btn').click = function(){
    var $page = $('html','body')  //这里是用于后面设置,不能用于读取,因为有两个值
    var distance = $('html').scrollTop() + $('body').scrollTop()  //总距离
    var time = 500  //总时间
    var intervalTime = 50  //间隔时间
    var itemDistance = distance/(time/intervalTime)  //单位时间运动距离
    var intervalId = setInterval(function(){
        distance -= itemDistance
        if(distance<=0){
            distance = 0
            clearInterval(intervalId)
        }
        $page.scrollTop(distance)
    },intervalTime)
}

尺寸

(1)内容尺寸

height():height

width():width

(2)内部尺寸

innerHeight():height+padding

innerWidth():width+padding

(3)外部尺寸

outerHeight(false/true):height+padding+border,若是 true 加上 margin,默认是 false

outerWidth(false/true):width+padding+border,若是 true 加上 margin,默认是 false

2、筛选————过滤和查找

对包含多个 dom 元素的 jQuery 对象进行过滤是找出对象中的一个或多个元素,并封装成新的 jQuery 对象返回;

而查找是指查找对象内部某元素的父母、子孙后代或兄弟元素,并封装成新的 jQuery 对象返回

过滤

first():jQuery 对象中的第一个 dom 元素组成的 jQuery 对象,返回的是 jQuery 对象(last()eq(index)同理)

注意 jQuery对象.first() 返回的是 jQuery 对象,而 jQuery对象[0] 返回的是对象中包含的的第一个 dom 元素

filter('[属性名]=xxx') 过滤出属性为某值的元素,(对当前元素提要求)

filter('[属性名]!=xxx')not('[属性名]=xxx') 过滤出没有某属性以及属性不为某值的元素,(对当前元素提要求并取反)

filter('[属性名][属性名]!=xxx') 过滤出有某属性并且属性值不为某值的元素

has('标签名') 过滤出元素中有子标签的元素,(对子元素提要求)

var $lis = $('ul>li')
$lis.first().css('background','red')  //相当于 $lis[0].style.background = 'red'
$lis.filter('[title=hello]')  //title 属性为 hello 的 li
$lis.not('[title=hello]')  //title 属性不为 hello 的 li
$lis.filter('[title][title!=hello]') //有 title 属性且title 属性不为 hello,相当于 $lis.filter('[title]').filter('[title!=hello]')
$lis.has('span') //有 span 子标签的 li

查找

children('条件') 查找子元素(直接子元素,而非后代)

find('条件') 查找后代元素

parent() 查找父元素

preAll('条件') 前面的所有的符合条件的兄弟元素

nextAll('条件') 后面所有的符合条件的兄弟元素

siblings('条件') 前后所有的兄弟元素

var $ul = $('ul')
$ul.children('span:eq(1)')  //ul 下的第 2 个 span 子标签
$ul.find('span:eq(1)')  //ul 下的第 2 个 span 后代标签
$ul.parent()  // ul 的父元素
var $li = $('#aa')
$li.preAll('li')  //id 为 aa 的 li 标签前面的所有 li
$li.siblings('li')  //id 为 aa 的 li 标签的所有兄弟 li

3、文档处理(CUD 增删改)

(1)添加元素

内部插入

append(content) 向当前匹配的所有元素内部的最后插入指定内容

$(content).appendTo($父) 向当前匹配的所有元素内部的最后插入指定内容,和上面效果相同

prepend(content) 向当前匹配的所有元素内部的最前面插入指定内容

$(content).prependTo($父) 向当前匹配的所有元素内部的最前面插入指定内容,和上面效果相同

外部插入

before(content) 将指定内容插入到当前所有匹配元素的前面

after(content) 将指定内容插入到当前所有匹配元素的后面替换节点

(2)删除元素

empty() 删除所有匹配元素的子元素,父元素本身还在,等价于 $('父 > *').remove()

remove() 删除所有匹配的元素(包括父元素本身和其下子元素)

$('#ul2').empty()
相当于 $('#ul2>*').remove()

(3)替换元素

replaceWith(content) 用指定内容替换所有匹配的标签删除节点

replaceAll(选择器) 用指定元素替换所有匹配的标签删除节点

var $ul1 = $('#ul1')
$ul1.append('<span>xxx</span>')  //相当于 $('<span>xxx</span>').appenTo($ul1)
$ul1.prepend('<span>xxx</span>')  //相当于 $('<span>xxx</span>').prepenTo($ul1)
$ul1.children('li[title=hello]').before('<span>xxx</span>')  //在 id 为 ul1 的 ul 下的 li(title 为 hello)的前面添加 span
$('#ul2>li[title=hello]').replaceWith('<p>xxx</p>')//在 id 为 ul2 的 ul 下的 li(title 为 hello)全部替换为 p

4、事件处理

(1)绑定事件

方式一:jQuery对象.事件名(function(){}),这种方式好写但并不通用,有些事件没有这种绑定方法

方式二:jQuery对象.on('事件名1 事件名n',function(){})

优缺点:方式一编码方便,但只能加一个监听,且有的事件监听不支持

方式二编码不方便,可以添加多个监听,且更通用

常用:click、mouseenter/mouseleave、mouseover/mouseout、focus/blur

$('#image').on('load',function(){}) //监听图片加载完成,这时只能用 on

绑定鼠标点击事件

方式一:jQuery对象.click(function(){})

方式二:jQuery对象.on('click',function(){})

绑定鼠标移入移出事件

方式一:jQuery对象.mouseenter(function(){})jQuery对象.mouseleave(function(){})

方式二:jQuery对象.on('mouseenter',function(){})jQuery对象.on('mouseleave',function(){})

方式三:jQuery对象.hover(function(){console.log('鼠标移入,绑定在mouseenter')},function(){console.log('鼠标移出,绑定在mouseleave')})

(2)解除事件绑定

jQuery对象.off('事件名')

(3)事件坐标

event.clientX、event.clientY 相对于视口的左上角

event.pageX、event.pageY 相对于页面的左上角

event.offsetX、event.offsetY 相对于事件元素左上角

$(#btn).click(function(event){
    console.log(event.clientX,event.clientY) //原点为窗口左上角
    console.log(event.pageX,event.pageY) //原点为页面左上角
    console.log(event.offsetX,event.offsetY) //原点为事件元素左上角
})

(4)事件相关处理

停止事件冒泡

event.stopPropagation 点击子元素,父元素点击监听不响应

阻止事件默认行为

event.preventDefault() 阻止事件默认行为

$('#test').click(function(event){
    if(Date.now()%2===0){
        event.preventDefault()
    }
})

mouseover 和 mouseenter 的区别

mouseover 在移入子元素时也会重新触发一次,mouseout 同理

mouseenter 只在移入当前元素时才触发,mouseleave 同理,hover() 使用的就是 mouseenter() 和 mouseleave()

若不存在子元素则 mouseover 和 mouseenter 没有区别

on(‘click’,fun) 和 click(fun) 的区别

on 方法通用,但编码麻烦

click 方法编码简单,但有的事件没有对应的方法

(5)事件委托/事件代理/事件委派

绑定事件监听的问题:新加的元素没有监听

事件委托

— 将多个子元素的事件监听委托给父辈元素处理

— 事件监听是加在父辈元素上,但事件发生在子元素上

— 当操作任何一个子元素时,事件会冒泡到父辈元素

— 父元素不会直接处理事件,而是根据 event.target 得到发生事件的子元素,通过这个子元素来调用事件回调函数(回调函数中的 this 指发生事件的子元素)

使用事件委托的好处

添加新的子元素,自动有事件响应处理

减少事件监听的数量(如从 n 个减为 1 个)

jQuery 的事件委托 API

设置事件委托:

(1)$(父元素选择器).delegate(子元素选择器,事件名,回调函数)

(2)$(父元素选择器).on(事件名,子元素选择器,回调函数)

(3)在 1.7 及以下还可以使用 live 函数,但在 1.7 以上已被废除

移除事件委托:$(父元素选择器).undelegate(事件名),若不加事件名参数表示移除对应的所有事件

四、动画效果

1、淡入淡出

淡入淡出通过不断改变元素的透明度来实现

fadeIn() 带动画的显示

fadeOut() 带动画隐藏

fadeToggle() 带动画切换显示/隐藏

可选参数有速度、切换效果、回调函数

— 速度:slow、normal、fast、毫秒数

— 切换效果:swing(默认)、linear

— 回调函数:在动画完成时执行

2、滑动

滑动动画通过不断改变元素的高度实现

slideDown() 带动画的展开

slideUp() 带动画的收缩

slideToggle() 带动画的切换展开/收缩

可选参数有速度、切换效果、回调函数

3、显示与隐藏

显示与隐藏通过不断改变宽度、高度、透明度来实现,默认是没有动画

show() (不)带动画的显示

hide() (不)带动画的隐藏

toggle() (不)带动画的切换显示/隐藏

可选参数有速度、切换效果、回调函数

4、自定义动画

jQuery对象.animate({样式设置},毫秒数),其中样式可不写单位,若写单位需要将数值和单位加引号

$('#div1')  //宽度先变为200px,高度再变为200px
    .animate({
        width:200
    },1000)
    .animate({
        height:200
    },1000)
$('#div1').animate({  //移动距离为(100,50)
    left:'+=100',
    top:'+=50'
},1000)
$('#div1').animate({  //移动距离为(-100,-20)
    left:'-=100',
    top:'-=50'
},1000)

5、停止动画

jQuery对象.stop() 停止动画

五、多库共存

问题:如果有两个库都有 $,就存在冲突

解决:jQuery 库可以通过 jQuery.noConflict() 释放 $ 的使用权,让另一个库可以正常使用,此时 jQuery 库只能使用 jQuery 了

六、onload 与 ready

$(function($){})

$(document).ready(function(){})

window.onload = function(){}

上面三种方式基本等价,其中回调函数会在 DOM 加载完成时运行

注意 $(function($){}) 和 document.ready 等价,表示文档(结构)加载完毕,而 window.onload 表示整个页面(包括图片等)加载完毕

window.load 与 $(document).ready()区别

window.load 中包括页面的图片加载完后才会回调(晚),且只能有一个监听回调,后面加的监听回调会覆盖前面的

$(document).ready() 等同于 $(function(){}),页面加载完就回调(早),且可以有多个监听回调

window.onload = function(){  //不执行,被下面的 window.onload 覆盖
    console.log('onload1')
}
window.onload = function(){  //执行
    console.log('onload2')
}
$(function(){                //执行
    console.log('ready1')
})
$(function(){                //也执行
    console.log('ready2')
})

七、jQuery插件

1、扩展插件

jQuery.extend 是扩展 jQuery 对象本身(即jQuery 函数对象)的工具方法(扩展 $ 的方法),调用时 $.新方法()

jQuery.fn.extend 是扩展 jQuery 对象(jQuery 元素集)的功能方法(扩展 $() 返回值的方法),调用时 $(xxx).新方法()

注意:自定义的插件文件要在 jQuery 后引入

(1)扩展 jQuery 的工具方法

$.extend(object),其中 this 指 $,使用 $.xxx() 调用

(2)扩展 jQuery 对象的方法

$.fn.extend(object),其中 this 指 jQuery 对象,使用 $obj.xxx() 调用

编写插件文件 myjQuery-plugin.js
(function(){
    $.extend({          //给 $ 添加工具方法
        min:function(a,b){
            return a < b ? a : b
        },
        max:function(a,b){
            return a > b ? a : b
        },
        leftTrim:function(str){
            return str.replace(/^\s+/,'')
        },
        rightTrim:function(str){
            return str.replace(/\s+$/,'')
        }
    })
    $.fn.extend({      //给 jQuery 对象添加功能方法
        checkAll:function(){
            this.prop('checked',true) //this 是 jQuery 对象
        },
        unCheckAll:function(){
            this.prop('checked',false)
        },
        reverseCheck:function(){
            this.each(function(){ //this 是 jQuery 对象
                this.checked = !this.checked   //this 是 dom 元素
            })
        },
    })
})()
在其他 js 文件中使用插件
<script src="./jquery-1.10.1.js" type="text/javascript"></script>  //先引入 jQuery
<script src="./myjQuery-plugin.js" type="text/javascript"></script>  //引入自定义的插件文件
<script type="text/javascript">
    console.log($.min(1,2),$.max(2,1))
</script>

2、jQuery 插件

jQuery 插件是基于 jQuery 编写的扩展库,在官网可查看相关 jQuery 插件

常用的有 jquery-validation(表单验证插件)、jquery UI、laydate(日期控件,该控件其实不属于 jQuery 插件)

使用插件

jquery-validation

先在官网下载相应插件,并把有用文件拷贝在项目文件夹下,然后利用 <script> 引入 jQuery 和 插件库

<form id="myForm" action="xxx">
    <p>用户名(必须,最小6位):<input name="username" type="text" required minlength="6"></p>
    <p>密码(必须,6-8位):<input id="password" name="password1" type="password" required minlength="6" maxlength="8"></p>
    <p>确认密码:<input name="password2" type="password" equalTo="#password"></p>
    <p><input type="submit" value="注册"></p>
</form>
<script type="text/javascript" src="jquery-1.11.1.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script>
    //声明式验证:程序员只需声明各种验证规则,也可自定义验证错误信息
    $('#myForm').validate({  //对此表单开启验证
        messages:{  //自定义错误提示(可选)
            username:{  //使用表单项的 name 值
                required:'用户名是必须的',
                minlength:'用户名至少6位'
            },
            password1:{  //使用表单项的 name 值
                required:'密码是必须的',
                minlength:'密码至少6位',
                maxlength:'密码最多6位'
            },
            password2:{
                equalTo:'必须与密码相同'
            }
        }
    })
</script>

jquery UI

官网下载插件,并把 jquery.js、jquery-ui.js、jquery-ui.css 三个文件拷贝至项目文件夹

<head>
    <link rel="stylesheet" href="jquery-ui.css">
</head>
<body>
    <h2>手风琴Accordion效果</h2>  <!--以下结构是从插件的index.html中拷贝来的-->
    <div id="accordion">
        <h3>First</h3>
        <div>xxxxx</div>
        <h3>Second</h3>
        <div>xxxxx</div>
        <h3>Third</h3>
        <div>xxxxx</div>
    </div>
</body>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery-ui.js"></script>
<script>
    $('#accordion').accordion()  //开启样式效果
</script>

laydate

官网下载插件,把 need 文件夹、skins 文件夹、laydate.js 文件拷贝至项目文件夹中并放在同一目录下

<head>
    <script type="text/javascript" src="laydate.js"></script>
</head>
<body>
    <!--方式一-->
    <input placeholder="请输入日期" class="laydate-icon" onclick=""laydate()>
    <!--方式二-->
    <input class="laydate-icon" id="demo" value="xxx">   
    <script>
        ;!function(){
            laydate({
                elem:'#demo'
            })
        }()
    </script>
    <!--方式三-->
    <input class="laydate-icon" id="test">
    <script>
        laydate({
            elem:'#test',
            format:'YYYY/MM',  //分隔符可以任意定义,该例子只显示年月
            festival:true,   //显示节日
            choose:function(datas){  //选择完日期的回调
                alert(datas);
            }
        })
    </script>
</body>

八、jQuery 文档结构图

jQuery文档结构图

九、其他

1、伪数组

伪数组是 Object 对象,有 length 属性和数值下标属性,但不是数值(即 伪数组 instanceof Array 结果为 false),没有数组特别的方法(如 forEach()、push()、pop()、splice()等)

自定义一个伪数组

var w = {}
w.length = 0
w[0] = 'xxx'
w.length = 1
w[1] = 123
w.length = 2
for(var i=0;i<w.length;i++){  //可循环遍历元素
    var obj = w[i]
    console.log(i,obj)
}
console.log(w.forEach)  //会返回 undefined

2、轮播图

要实现循环切换,需在最后一张图片(5.jpg)后添加一张第一张图片(1.jpg),在第一张图片(1.jpg)前面添加最后一张图片(5.jpg)

若到达最后一张图片(5.jpg),则跳转到最左边第 2 张图片(1.jpg),若到达最左边的图片(5.jpg),则跳转到最右边的第 2 张图片(5.jpg)

还需注意快速点击时的bug(即正在翻页时点击向上或向下翻页),可在代码中设置标识判断当前是否正在翻页,翻页结束后更新标识值