La récursivité en bas de l'arbre DOM

C'est le code de Crockford JavaScript: Les Bonnes Pièces.

var results = [];

var walkDOM = function (node,func) {
        func(node);                     //What does this do?
        node = node.firstChild;
        while(node) {
            walkDOM(node,func);
            node = node.nextSibling;
        }

    };

Je comprends le code, sauf pour func(node). Je suppose que le point est de passer node comme paramètre dans la fonction func, mais comment le navigateur comprendre de cette façon? node et func pourrait être n'importe quoi--alors, quand la fonction est appelée, elle pourrait lire comme ceci:

walkDOM(document.body,function(att) {
          node.getAttribute(att);
          results.push(node);
          });

Quand func est passé, walkDOM traitera de la fonction(att) {...}(document.corps)--qui n'aurait pas de sens. Alors pourquoi Crockford a choisi d'inclure func(nœud)?

  • Il est prévu que le développeur à l'aide de walkDOM va passer une fonction qui s'attend à recevoir un DOM de noter que l'argument. Votre fonction s'attend à recevoir un nom d'attribut, et en tant que tel, ne serait pas appropriée.
  • ne comprends toujours pas la notation de func(node). Est le développeur censé remplacer par function(node)? Et si non, comment func(node) sens pour le navigateur?
  • Le navigateur n'a pas besoin d'en comprendre le sens. Seul le développeur qui a écrit la fonction qui lui a été transmis walkDOM doit faire sens. Si je veux marcher sur le DOM, chaque nœud de texte, et de remplacer le texte par "patrick dw est tellement beau", puis je place cette logique dans la fonction que j'ai passer. Le walkDOM va passer chaque nœud à votre fonction (un à la fois), et votre fonction est responsable de faire quelque chose avec ce nœud.
  • ...rappelez-vous, func est tout simplement une référence à la même fonction que vous avez passé à walkDOM. Donc func( node ) est tout simplement l'appel de votre fonction, et en passant le nœud courant.
  • Avez-vous éventuellement d'acquérir une compréhension complète de la walkTheDOM code? Si non, j'aimerais de l'aide.
  • La fonction récursive dans l'exemple comprend l'utilisation de nœud.getAttribute simplement à démontrer pour le noob de l'élève et qui non seulement les nœuds peuvent être obtenus, mais leurs attributs. Il anticipe la question de savoir " si les nœuds peut être accédé comme cela, peut attributs?' - il n'est pas le code complet, qui pourrait inclure quelque chose comme var attrVariable = node.getAttribute("class"); je suppose que vous pourriez parcourir les résultats de tableau et d'examiner les attributs, mais si vous ne voulait retourner des nœuds dans ce tableau avec des attributs qui correspondent seulement à un certain type?

InformationsquelleAutor dopatraman | 2011-08-06