有一天我想我在jQuery中看到一个对象迭代器,它有一个可以设置为递归迭代子对象的标志。我认为这是jQuery.each()的一部分,但现在我没有看到在文档中的能力。
有没有任何这样的迭代器在jQuery可以自动递归?
(我知道如何在javascript中做,只是想知道我是否真的看到我以为我看到了。)
非常感谢!
编辑:清楚的是,我在想一个像jQuery.each()这样的实用程序方法,它将递归地遍历javascript对象及其嵌套对象。
给定下面的示例,each()方法将遍历所有对象,包括myobj.obj2.key2中的嵌套对象。
我可以宣誓,我在jQuery文档中看到了一些东西,但现在我找不到它。
谢谢。
var myobj = { obj1: {key1:'val1',key2:'val2'},obj2: {key1:'val1',key2: {nest1:'val1',nest2:'val2',nest3:'val3'}},obj3: {key1:'val1',key2:'val2'} } $jQuery.each(myobj,function(key,val) { // Code to run over each key/val pair // Does so recursively to include all nested objects })
解决方法
.find(‘selector’)方法基本上是.children()的一个隐藏版本,并且将找到与选择器匹配的任何后代对象,而不是.children(),后者仅查找第一级后代中的对象。
第二次编辑(我第一次写得不好,把代码弄了一点!):
好吧,我不认为这个功能作为一个标志将是有意义的:你可以很高兴地通过该对象永远递归(相信我,我打破了firefox这样做),所以你需要一些交互,以确保你只递归子对象是有效的递归候选。
你需要做的是简单地分割功能,如:
var myobj = { obj1: {key1:'val1',key2:'val2'} }
$ jQuery.each(myobj,function(key,val){recursiveFunction(key,val)});
function recursiveFunction(key,val) { actualFunction(key,val); var value = val['key2']; if (value instanceof Object) { $.each(value,val) { recursiveFunction(key,val) }); } }
function actualFunction(key,val){/// 做东西}}