遍历在这里 http://my.oschina.net/u/2352644/blog/508397
废话不多说,一个句话告诉你jq的遍历工具
我们对数组的循环一般是用for或者for in,这是原生js支持,同样既然用jq的了,咱jq也提供了对数组的遍历方法,也就是对原生js循环的封装
一、$.each()和for循环等不得不说的秘密
我们循环一个数组一般是下面的处理,利用for循环
var arr=[0,1,2];
for(var i=0;i<arr.length;i++){
alert("第"+i+"项"+arr[i])
};
会弹出第几项是几,这是我们最习惯的写法,我们下面看jq提供的方法,
var arr=[0,1,2];
$.each( arr, function(i, n){
alert("第"+i+"项"+n)
});
效果一样,这个就是jq提供的遍历方法,如果仅仅是对普通数组可以,那就没必要了,既然封装,肯定功能比较多的,我们还可以遍历对象类型数据({})的,看下面
var obj={"aa":1,"bb":2,"cc":3};
$.each( obj, function(i, n){
alert("第"+i+"项"+n)
});
--觉醒了
我们突然醒悟,我们在上篇博客知道有for in循环,这个不就可以实现数组和对象类型的循环吗,既然已经醒悟,我们自己封装一个each方法吧!
function each(obj,callback){
for(var i in obj){
callback(i,obj[i]);
};
};
var obj={"aa":1,"bb":2,"cc":3};
each( obj, function(i, n){
alert("第"+i+"项"+n)
});
万能的主已经靠近我们,在测试循环数组
function each(obj,callback){
for(var i in obj){
callback(i,obj[i]);
};
};
var arr=[0,1,2];
each( arr, function(i, n){
alert("第"+i+"项"+n)
});
再不用jq的时候我们只要写了这个函数也就各种遍历了
二、$.extend()
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var newobj=$.extend(settings, options);
alert(newobj[‘validate‘])
函数会获取前后对象的所有属性(下表),出现相同下表后替换前原则,我们在一片jq插件很详细介绍过这个的使用原理,除了合成新的对象还可以做工具扩展
http://my.oschina.net/u/2352644/blog/487688
三、$.grep()
var aa=$.grep( [0,1,2], function(n,i){
return n > 0;
});
alert(aa)
迭代方法,过滤出我们需要的内容
--模拟实现
function grep(arr,callback){
var temp=[];
for(var i=0;i<arr.length;i++){
if(callback(arr[i],i)){
temp.push(arr[i]);
}else{
}
};
return temp;
};
var aa=grep( [0,1,2], function(n,i){
return n > 0;
});
alert(aa)
四、$.inArray()
var arr = [ 4, "Pete", 8, "John" ];
alert($.inArray("John", arr));
返回参数值在数组的位置,不存在返回-1
--模拟实现
function inArray(rel,arr){
var index=-1;
for(var i=0;i<arr.length;i++){
if(arr[i]==rel){
index=i;
}else{}
}
return index;
};
var arr = [ 4, "Pete", 8, "John" ];
alert(inArray("John", arr));
alert(inArray("aa", arr));
五、$.merge()
alert($.merge( [0,1,2], [2,3,4] ));
把参数2数组和参数1数组拼接
--模拟实现
function merge(arr1,arr2){
return arr1.concat(arr2)
};
alert(merge( [0,1,2], [2,3,4] ));
原文:http://my.oschina.net/u/2352644/blog/509066