Javascript - 使用BFS从头开始getElementbyID?

时间:2011-11-17 09:02:34

标签: breadth-first-search javascript

我正在尝试学习javascript,并且今晚使用广度优先搜索编写了一个getElementByID()函数。简而言之:我迷路了。

小提琴:http://jsfiddle.net/timdown/a2Fm6/

代码:

var nodes = [];

function getElementById(node, id) {
    alert(nodes.length);
        if (node.childNodes[i].id == id) {
            return node.childNodes[i];
        } else if (node.childNodes[i].length > 0) {
          for (var i = 0, len = node.childNodes.length; i < len; ++i) {
            nodes.push(node.childNodes[i]);
          }
        }
    if (nodes.length > 0) {
      getElementById(nodes[0], id);  
    }
}

var el = getElementById(document.body, 'id');

任何帮助?

1 个答案:

答案 0 :(得分:5)

你错过了代码上半部分的for循环。 i定义在哪里?

以下是我写的方式:

function getElementById(node, id) {
    //An array of all the nodes at the same depth
    var nodes = [node];

    //While the array is not empty
    while(nodes.length) {
        var newNodes = [];
        for(var i = 0; i < nodes.length; i++) {
            var children = nodes[i].childNodes;
            for(var j = 0; j < children.length; j++) {
                var child = children[j];
                if(child.id == id) {
                    return child
                }
                newNodes.push(child);
            }
        }

        //Replace nodes with an array of the nodes the next level down
        nodes = newNodes
    }
}