如何使用jquery $ .each()方法迭代对象文字数组?
在chrome调试器中,它返回“未定义,未定义”。
任何帮助都会非常感激。谢谢!
var links = [
{ className : 'hover', url : 'http://www.yahoo.com' },
{ className : 'hover-2', url : 'http://www.foxnews.com' },
];
loopy(links)
function loopy(obj){
$.each(
obj,
function(){
console.log(obj.className + ', ' + obj.url);
}
);
}
答案 0 :(得分:6)
尝试:
$.each(
obj,
function(i, val){
console.log(val.className + ', ' + val.url);
}
);
$.each
函数参数有两个参数 - 数组中当前项的索引,第二个是数组的实际当前值。
有关更多解释和示例,请参阅API。
您可以看到此fiddle以查看其实际效果。
答案 1 :(得分:1)
我只是想提供一个稍微修改过的David的响应版本,在处理大型对象时会对DOM更加温和。
原始答案(上):
$.each(
obj,
function(i, val){
console.log(val.className + ', ' + val.url);
}
);
此解决方案有效,但它为对象中的每个属性生成一个全新的迭代器函数实例。没有必要,我认为通过声明处理这类事情的具体方法,你会在更大的应用程序中找到更稳定的性能。
试试这个:
// Process a property in your link object
function links_iterationHandler(i, val) {
console.log(val.className + ', ' + val.url);
}
// Traverse the link object and pass each result off to the method above
$.each(obj, links_iterationHandler);
这基本上做同样的事情,但不会对DOM施加同样的影响。如果您的对象中只有几个项目,那么这不是什么大问题。但是如果你正在处理大量数据,比如通过Ajax加载的大记录集,它肯定会有所作为。
干杯!
答案 2 :(得分:0)
我会试试这个: $ .each([52,97],function(index,value){ alert(index +':'+ value); });
第一个属性是索引。