原文:http://www.frontopen.com/1394.html

在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法。

$().each 在dom处理上面用的较多。如果页面有多个input标签类型为checkbox,对于这时用$().each来处理多个checkbook,例如:

$(“input[name=’ch’]”).each(function(i){
if($(this).attr(‘checked’)==true)
{
//一些操作代码
}
回调函数是可以传递参数,i就为遍历的索引。

遍历一个数组通常用$.each()来处理  例如:


$.each([{name:"limeng",email:"xfjylimeng"},{name:"hehe",email:"xfjylimeng"}],function(i,n)
{
alert("索引:"+i+"对应值为:"+n.name);
});

参数i为遍历索引值,n为当前的遍历对象.


var arr1 = [ "one", "two", "three", "four", "five" ];
$.each(arr1, function(){
alert(this);
});
输出:one   two  three  four   five var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
$.each(arr2, function(i, item){
alert(item[0]);
});
输出:1   4   7 var obj = { one:1, two:2, three:3, four:4, five:5 };
$.each(obj, function(key, val) {
alert(obj[key]);
});
输出:1   2  3  4  5

其实jQuery里的each方法是通过js里的call方法来实现的。

下面简单介绍一下call方法。
call这个方法很奇妙,其实官方的说明是:“调用一个对象的一个方法,以另一个对象替换当前对象。”网上更多的解释是变换上下文环境,也有说是改变上下文this指针。
call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2,  , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

引用网上有一个很经典的例子

Js代码

function add(a,b){
alert(a+b);}
function sub(a,b){
alert(a-b);}
add.call(sub,3,1);

用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

下面提一下jQuery的each方法的几种常用的用法

Js代码
var arr = [ “one”, “two”, “three”, “four”];
$.each(arr, function(){
alert(this);
});
//上面这个each输出的结果分别为:one,two,three,four

var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]
$.each(arr1, function(i, item){
alert(item[0]);
});
//其实arr1为一个二维数组,item相当于取每一个一维数组,
//item[0]相对于取每一个一维数组里的第一个值
//所以上面这个each输出分别为:1   4   7

var obj = { one:1, two:2, three:3, four:4};
$.each(obj, function(key, val) {
alert(obj[key]);
});
//这个each就有更厉害了,能循环每一个属性
//输出结果为:1   2  3  4

jQuery each源码

each: function( obj, callback ) {
var length, i = 0; if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} else {
for ( i in obj ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} return obj;
}

最新文章

  1. ASP.NET MVC原理
  2. MySQL复制配置(多主一从)
  3. eclipse绘制activiti无法生成图形
  4. WingIDE中文乱码问题解决方法
  5. .Net语言 APP开发平台——Smobiler学习日志:如何在webview中加载网页
  6. 搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器
  7. 让Jayrock插上翅膀(加入输入输出参数注释,测试页面有注释,下拉框可以搜索)
  8. Tostring记录,方便自己查看
  9. yeoman开始项目
  10. 动态创建组件TEdit
  11. HDOJ/HDU 2140 Michael Scofield&#39;s letter(字符转换~)
  12. Asp.net简单实现forms验证
  13. 依赖注入(IOC)二
  14. vue.js应用开发笔记
  15. TV 丽音(NICAM)功能
  16. HDU 2196树形DP(2个方向)
  17. 使用Druid作为SpringBoot项目数据源(添加监控)
  18. MS SQL CASE WHEN 的用法
  19. Mac 安装多个python环境
  20. inoremap nnoremap vnoremap

热门文章

  1. PHP定义静态方法的原则
  2. 在Windows上创建同样的Linux操作环境
  3. JTable,TableModel,DefaultTableModel与AbstractTableModel的小结
  4. vue+vuex初入门
  5. C# asp.net PhoneGap html5
  6. 报错找不到org.apache,http...的解决办法
  7. Navicat连接不上MySQL
  8. Python 代码规范
  9. Android 简单的图片缩放方法
  10. NEUQ1051: 谭浩强C语言(第三版)习题6.7