0

DOM 要素を指定します。

BFSを作成して、そのすべての子 (および子の子など) について、どのレベルで、 href<a>属性を満たす要素がX に等しいかを見つけることができるようにするにはどうすればよいですか。X は配列です。可能な値の。

これが私がこれまでに持っているものですが、深さ変数をいつどのように増やすかわかりません:

function findAnchorBFS(element) {
    if (element.nodeName == 'A' && isHrefHost(element.href)) {
        return 0; // this is the main level
    }

    var elements = [element];
    var level = 0;

    while (elements.length) {
        var newElements = [];
        for (var i=0; i < elements.length; i++) {
            var children = elements[i].children;
            for (var j=0; j < children.length; j++) {
                var child = children[j];
                if (child.nodeName == 'A' && isHrefHost(child.href)) {
                    return true;
                }
                newElements.push(child);
            }
        }
        elements = newElements;
    }

}
4

1 に答える 1

1

深度を記録するように変更されたコードは次のとおりです。

function findAnchorBFS(element) {
    if (element.nodeName == 'A' && isHrefHost(element.href)) {
        return 0; // this is the main level
    }

    var elements = [{ el: element, depth: 0 }];

    while (elements.length) {
        var newElements = [];
        for (var i=0; i < elements.length; i++) {
            var newDepth = elements[i].depth + 1;
            var children = elements[i].el.children;
            for (var j=0; j < children.length; j++) {
                var child = children[j];
                if (child.nodeName == 'A' && isHrefHost(child.href)) {
                    return newDepth;
                }
                newElements.push({ el: child, depth: newDepth });
            }
        }
        elements = newElements;
    }

}
于 2013-11-05T23:36:58.887 に答える