Dojo recursive DOM Walk

Example of Dojo Recursive DOM Walk. http://jbs-trash.blogspot.com/2012/04/recursive-dom-walk-with-dojo.html

by joshuaboshi

HTML

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojox/grid/resources/claroGrid.css">
<div id="tag">
Hello!
<span>this is tag</span>
    <b>this is <span>another</span></b>
    <ul>
        <li>test</li>
        <li>test</li>
        <li><span>test</span></li>
        <li>test</li>
        <li>test</li>
    </ul>
</div>

JavaScript

require([
    "dojo/_base/lang",
    "dijit/form/Button",
    "dojo/query",
    "dojo/NodeList-traverse",
    "dojo/domReady!"
    ], function(lang, Button, query) {


    var NodeList = query.NodeList;

    lang.extend(NodeList, {

        _walk: function(node, func) {
            func(node);
            node = query(node).children().first()[0];
            while (node) {
                this._walk(node, func);
                node = query(node).next()[0];
            }
        },

        walk: function(func) {
            this.forEach(function(node) {
                this._walk(node, func);
            }, this);
        }
    });


    var btn = new Button({
        label: 'walk',
        onClick: function() {
            query('#tag').walk(function (node) {
               console.log(node);
            });
        }

    }).placeAt(document.body);

})