锋利的jQuery

690 查看


jquery对象

jquery最重要的就是其对象,它的调用基本可以分成方法和函数(方法当然是函数,这里这么说是把由对象调用的和由类调用的区分开来),所以得到jQuery对象就十分重要,第一部分只有一个函数$()

$(document.getElementById('mydiv'));
$(this)
//从原生对象中生成jQuery对象
var dst=$(CSS-selector);
//利用CSS选择器从文档中得到jquery对象
typeof dst[0]//并非jQuery对象而是原生对象
$('body')[0]==document.body//true
$('.btn-lg',$('body'));
//在body中得到类为btn-lg的元素组装成为对象,$()的第二参数为上下文
$('<img/>',{
    src:"http://www.example.com/img/00.jpg",
    css:{
        width:90px;
        height:45px;
    },
    click:handler
});
//产生一个新对象
//最后一个用法,与上面不同,用来做事件注册
$(func);
//等同于$(document).ready(func); func里的this指向原生对象document

jQuery属性方法

jquery的getter和setter不做区分是同一个函数,设定值时就是setter,否则就是getter,但getter得到的是jQuery对象中第一个元素对应的属性值
下面首先介绍有哪些属性方法

  • attr,处理html属性
  • css,处理css属性
  • addClass,removeClass,增添删除对应CSS类
  • toggleClass,没有则加,有则删
  • hasClass,jQuery对象元素中至少有一个满足就返回true,否则false
  • val,操作表单各项,比如文本,复选框等
  • 各种坐标属性方法如offset,innerWidth
  • data与removeData,将数据绑定到元素上

用法,以下用func指代属性方法

$('..').func(attribute-name);
$('..').func(name,value);
$('..').func({
    name1:value1,
    name2:value2,
    ...
})
$('..').func(name,function);//function的返回值是name的值
//特例
$('..').val()//get方法
$('..').val(value)//set方法
$('..').is('CSS-selector')//至少有一个满足

修改文档结构

基本分成两种形式

$(target).position($(content));
//上面加$是为了说明均是jQuery对象,position指的是一些位置描述,比如after,before,append等
$(content).actionPosition($(target));
//action代表采取的操作如insert、append和replace等,position代表相对位置如To、All和after等
//比较特殊的例子
$('..').clone()
//clone不会复制事件处理器,要复制的话可以在注册时采用live方法绑定
$('..').wrap(document-element)
//对每一个选中元素外面加一层包装
$('..').wrapall(document-element)
//将选中元素作为一组来包装
$('..').wrapInner(document-element)
//包装每个选中元素的内容

具体的操作函数太多了就不一一列出了

事件处理

这一部分在我之前的博客中有详细讲述,还是复制粘贴以下吧
Web之事件处理

jquery事件处理器

  • jquery的事件处理程序一般只有一个参数(必定是第一个参数),那就是jquery事件对象。
  • jquery处理器中的this指向的是对应html元素,需要转成jquery对象,看下面例子
$("p").click(function(){
    $(this).css({background,#555555});  
});
  • jquery处理器的返回值始终有意义,如果返回false,该事件的默认行为及接下来的冒泡传播均会停止,类似于调用了stopPropagation和preventDefault.
  • 要想传入多个参数,需用trigger函数显式触发事件。

jquery事件对象

包含了jquery事件的详细信息,有诸多NB属性,比如data属性,还定义了preventDefault等方法。

jquery注册

简单注册
$(".sign").click(handler);
//jquery对象.简单事件类型名(处理器);
//注意,以下为特例
$(selector).hover(f,g);
//为鼠标放上去和离开分别注册
$(selector).toggle(f1,f2,f3...);
//第i次事件调用fi
高级注册
$('a').on('mouseover mouseleave',handler);
$('a').on({
    mouseover:f,
    mouseleave:g
});
$('a').on('mouseover',{sb:6},handler);
//中间参数会作为jquery事件对象的data属性值
//对于动态元素怎么办呢
$(parent).on(name,childSelector,{sb:6},handler);
//用父元素为它注册
//one方法使用与on一致,但只起一次作用,搞完就注销

事件注销

$(selector).off('EventName');
//移除该事件所有处理器
$(selector).off(jquery对象);
$('a').off({
    mouseover:f,
    mouseleave:g
});//移除单个处理器

事件触发

$('a').click();
//$(selector).SimpleEventName();但这样不能手动触发addEventListener和attachEvent注册的处理器
$(selector).trigger(EventName,[args]);
//triggerHandler方法触发的事件不会冒泡也没有默认操作
$(selector).live(Name,handler)
//为动态元素即在注册后添加的元素也注册,取消用die,用法基本同bind与unbind,在1.7版本后不可用,全部综合为on和off了

jQuery的AJAX

在jQuery1.5版之后下面的方法均返回的是jqXHR对象,其回调函数都可以使用链式调用添加,回调函数中的this指向ajax事件对象,需要注意done函数和其他的参数顺序有出入,下面就不一一举例了

辅助方法

$.load(url)
//调用http的get方法,并异步加载对应内容,默认得到html
$.load(url,{..});
//当第二个对象为json对象,时采用Post
$.load(url,{..},callback(data,status,req));
//第三个参数,没有json时为第二个参数回调函数,其参数分别是
//返回的数据,状态码如success,请求对象,可以缺省
//回调函数可缺省,其格式如上,不做特殊说明,下面均如此
$.getScript(url,callback(data,status,req));
//得到脚本后执行,再执行回调函数,默认得到javascript
$.getJSON(url,JSON,callback(data,status,req));
//中间参数可以缺省,这样回调函数就变第二个
//中间加数据的话,会变成字符串加在url的'&'和'?'后,也就是说方法依然是get了

常用方法

下面介绍两个十分常用的方法get和post

$.get(url,object,callback(data,status,xhr),type);
$.get(url,object,type).done(function(data,status,xhr){});
//get和post返回的同样是jqXHR对象,是一个deferred对象,所以可以链式调用done、fail、complete等
$.post(url,object,callback(data,status,xhr),type);
$.post(url,object,type).done(function(data,status,xhr){});
//基本同上面一致,但type是希望得到的数据类型,比如json(但要用
//$.parseJSON解析,还有script(传入回调函数前会执行),text等

最根本的方法

ajax函数是最复杂也是最根本的方法

var option={
    type:'GET',
    url:'url',
    data:string or JSON,
    dataType:'JSON',
    done:callback,
    error:errorhandler
};
$.ajax(option);
//ajax可以设置回调选项以在不同阶段做不同的回调处理
//阶段:beforesend,done(success),complete,error

//1.5版本之后可以用更舒服的写法
$.ajax(option).
    success(function(data,status,xhr){..}).
    fail(function(xhr,status,err){..}).
    always(function(xhr,status,err){..});
//注意回调函数参数顺序的不同,回调函数中this指向ajax事件

工具函数

$.each(list,f(index,value));
/*f的参数分别是对象的系列值和对应的值或者元素属性名和对应值,其
this和第二个参数一致,当返回false时循环停止*/
$.extend(dst,src);
//求两个对象的并集并赋给第一个,src中值为undefined和null会被忽略
$.merge(dst,src)
//同上面差不多,只不过对于类数组对象
$.map(list,f(index,value));
//list是类数组对象,其中每个元素被f处理,f返回值组成新数组返回
$.parseJSON(string);
//传入JSON格式字符串得到JSON对象

工具函数还有许多,这里只是列举了最常用的一些,其余的还是查找文档吧。

为jQuery写插件

(function($){
    $.fn.pluginname=function(..){
        ...
    };
})(jQuery);

注意事项

  • 好的命名规则,对于jQuery对象应该有特殊的命名规则比如在前面一致加上'$',才能免于与原生对象和一些临时变量混淆
  • 使用链式调用,会使得我们对操作的jQuery对象更清楚