2013-09-03 3 views
1

J'ai un objet qui ressemble à ce qui suit:jquery Looping (.each)

Node{ 
    name: "root", 
    level: 0, 
    children: Array[14], 
    parent: null, 
    id: 0 
} 

Et à l'intérieur Node.children ...

Node.children[ 
    { 
    name: "child1", 
    level: 1, 
    children: Array[1], 
    parent: root, 
    id: 1 
    }, 
    { 
    name: "child2", 
    level: 1, 
    children: Array[1], 
    parent: root, 
    id: 2 
    }, 
    { 
    name: "child3", 
    level: 1, 
    children: Array[2], 
    parent: root, 
    id: 3 
    }, 
] 

Et à l'intérieur Node.children [1] .children. ..

Node.children[1].children[ 
     { 
     name: "child1-1", 
     level: 2, 
     children: Array[0], 
     parent: child1, 
     id: 4 
     } 
] 

Ce que je dois faire une boucle est à travers l'objet de nœud et essayer de faire correspondre tous les « id » avec une valeur donné. Par exemple ...

$.each(Node, function(i, nodes){ 
    $.each(nodes, function (i2, nodes2){ 
     if (nodes2.id == 5){ 
      //do something 
     } 
    }) 
}) 
+1

Alors, quelle est votre question exactement? – m90

+0

Cela semble légitime, je pense que c'est la meilleure façon de le faire. '$ .each()' est votre outil pour le travail. – beautifulcoder

Répondre

0

essayer

$.each(Node.children, function(i, inode){ 
    $.each(inode.children, function (i2, inode2){ 
     if (inode2.id === 5){ 
      //do something 
     } 
    }); 
}); 
1

Vous voulez une fonction que vous pouvez appeler récursive:

function checkNode(node, action, id) { 
    if (node.id === id) 
    action(node); 

    var kids = node.children || []; 

    $.each(kids, 
    function(i,n) { 
     checkNode(n, action, id); 
    } 
); 
} 

appelé:

checkNode( 
    node, 
    function(n) { alert(n.name); }, 
    5 
);