jQuery对象的递归迭代

前几天我以为我在jQuery中看到了一个对象迭代器,它有一个可以设置为递归迭代子对象的标志。 我认为它是jQuery.each()的一部分,但现在我没有在文档中看到这种function。

在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()只能在第一级后代中找到对象。

第二次编辑(我第一次表达得非常糟糕,并且稍微搞砸了代码!):

好吧,我不认为这个function作为一个标志是有意义的:你可以非常高兴地永远地通过该对象递归(相信我,我打破了firefox这样做),所以你需要某种互动来确保你只是在递归时子对象是有效的递归候选者。

你需要做的就是像这样拆分函数:

 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){recursiveFunction(key,val)});

  function recursiveFunction(key, val) { actualFunction(key, val); var value = val['key2']; if (value instanceof Object) { $.each(value, function(key, val) { recursiveFunction(key, val) }); } } 

function actualFunction(key,val){
/// 做东西
}

上面是@Ed Woodcock版本的略微简化版本。 我需要使用它来输出带有命名链接的HTML项目符号列表。

 var list = "
    "; $.each(data, recurse); function recurse(key, val) { list += "
  • "; if (val instanceof Object) { list += key + "
      "; $.each(val, recurse); list += "
    "; } else { list += "" + key + ""; } list += "
  • "; } list += "
"; $("#container").html(list);

这个q和a非常有帮助。 谢谢。 (我也很欣赏cookie的参考。我还在讨论这本书!)。

这是我的版本为一个简单的i18n jQuery解决方案进行“搜索和替换”(这可能对某人有帮助)。 它发现如果术语在词典中,则包含在类中的术语将替换它。

小提琴: http : //jsfiddle.net/orolo/CeY5Y/11/

HTML:

 In the Clear and also Save Widget. I'm On the sub3 and PDF. 

javascript / jQuery:

 var term = ""; var customDict = { "Level One": { "Clear": "1234", "CSV": "CSV", "First": "First", "Last": "Last", "Next": "Next", "On": "42", "Off": "Off", "PDF": "alpha", "Prev": "Prev", "Rows": "Rows", "Save Widget": "saver widgetor", "Stats": "statistiques", "sub": { "sub2": { "sub3": "inception" } } } }; function recursiveLookup(key, val) { //test for a match between term and key if (key === term) { $('.i18n').each(function() { if ($(this).text() === key) { $(this).text(val); } }); } //val is an object or no match? recur if (val instanceof Object) { $.each(val, function(key1, val1) { recursiveLookup(key1, val1); }); } } function convert() { $('.i18n').each(function(key, val) { term = $(this).text(); $.each(customDict, function(key, val) { recursiveLookup(key, val); }); }); } /*call the function*/ convert(); 

你可以这样做更容易

 $(this).children().each(function(index, element) { ... });