2011-08-07 49 views
2

如何使用jquery $ .each()方法迭代对象文字数组?

在chrome调试器中,它返回为“undefined,undefined”。

任何帮助将非常感激。谢谢!

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); 

      }     

     ); 
    } 

回答

6

尝试:

$.each(
     obj, 
     function(i, val){ 
      console.log(val.className + ', ' + val.url); 
     }     
    ); 

$.each的功能参数有两个参数 - 当前项的索引阵列中,并且第二个是该阵列的实际电流值。

查看API了解更多解释和示例。

你可以看到这fiddle看到它的行动。

+0

它的工作!非常感谢!对此,我真的非常感激! – cpeele00

+0

+1的解释,如果只有人不费力地检查jQuery文档... – Mrchief

+0

@Mrchief - 谢谢! –

0

我只是想提供大卫的回应略加修改处理较大的物体时,这将是对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加载的大型记录集,它肯定会有所作为。

干杯!