jQuery编程中的一些核心方法简介
调用jQuery对象的方法很简单:
$('h1').remove();
大多数jQuery方法都是像上面这样被调用的,这些方法都位于$.fn命名空间内,这些方法称为jQuery对象方法。
但是也有一些方法不需要依赖于选择器的结果集,这些方法位于jQuery命名空间内,这些方法称为jQuery核心方法。如果觉得不好理解,记住下面两条即可:
- 所有jQuery选择器的方法都位于$.fn命名空间内。
- $内的方法一般都是一些实用的功能性方法,这些方法不依赖选择器,这些方法的参数和返回值也都大不相同。
有些对象方法跟核心方法的名称还会相同,例如$.fn.each和$.each,使用的时候需要格外注意。
jQuery的$命名空间中提供了很多实用方法:
去除字符串两遍的空白:
$.trim('lotsofextrawhitespace'); //返回'lotsofextrawhitespace'
对数组和对象进行迭代:
$.each(['foo','bar','baz'],function(idx,val){ console.log('element'+idx+'is'+val); }); $.each({foo:'bar',baz:'bim'},function(k,v){ console.log(k+':'+v); });
返回数组中某元素的索引,如果元素不存在则返回-1
varmyArray=[1,2,3,5]; if($.inArray(4,myArray)!==-1){ console.log('找到了'); }
用一个对象去扩展另外一个对象:
varfirstObject={foo:'bar',a:'b'}; varsecondObject={foo:'baz'}; varnewObject=$.extend(firstObject,secondObject); console.log(firstObject.foo);//'baz' console.log(newObject.foo);//'baz'
如果不想改变第一个对象中的值,在$.extend的第一个参数中传入一个空对象即可:
varfirstObject={foo:'bar',a:'b'}; varsecondObject={foo:'baz'}; varnewObject=$.extend({},firstObject,secondObject); console.log(firstObject.foo);//'bar' console.log(newObject.foo);//'baz'
改变函数的作用域:
varmyFunction=function(){console.log(this);}; varmyObject={foo:'bar'}; myFunction();//logswindowobject varmyProxyFunction=$.proxy(myFunction,myObject); myProxyFunction();//logsmyObjectobject
再结合事件看如何改变函数的作用域:
varmyObject={ myFn:function(){ console.log(this); } }; $('#foo').click(myObject.myFn);//logsDOMelement#foo $('#foo').click($.proxy(myObject,'myFn'));//logsmyObject
JavaScript本身有类型检测的方法,jQuery中也有,并且做得更好:
varmyValue=[1,2,3]; //用JavaScript的typeof操作符来判断类型 typeofmyValue=='string';//false typeofmyValue=='number';//false typeofmyValue=='undefined';//false typeofmyValue=='boolean';//false //用恒等于检测null myValue===null;//false //使用jQuery的方法来判断类型 jQuery.isFunction(myValue);//false jQuery.isPlainObject(myValue);//false jQuery.isArray(myValue);//true
向HTML元素添加额外的数据:
$('#myDiv').data('keyName',{foo:'bar'}); $('#myDiv').data('keyName');//{foo:'bar'}
所要添加的数据可以是任意类型:
$('#myListli').each(function(){ var$li=$(this),$div=$li.find('div.content'); $li.data('contentDiv',$div); }); //不需要再去找那些div了; //可以直接从list中读取出来 var$firstLi=$('#myListli:first'); $firstLi.data('contentDiv').html('newcontent');