私は最近、Facebook でフロントエンド エンジニアの職について面接を受けました。私の携帯電話の画面では、次の質問がありました。DOM ツリーからノードが与えられた場合、同一の DOM ツリーから同じ位置にあるノードを見つけます。わかりやすくするために、下の図を参照してください。
A B
O O
|\ |\
O O O O
/|\ /|\
O O O O O O
\ \
O O
これが私の解決策です。それを改善/最適化するために何ができるか疑問に思っていました。
var rootA, rootB;
function findNodeB(nodeA) {
// Variable to store path up the DOM tree
var travelPath = [];
// Method to travel up the DOM tree and store path to exact node
var establishPath = function(travelNode) {
// If we have reached the top level node we want to return
// otherwise we travel up another level on the tree
if (travelNode === rootA) {
return;
} else {
establishPath(travelNode.parentNode);
}
// We store the index of current child in our path
var index = travelNode.parentNode.childNodes.indexOf(travelNode);
travelPath.push(index);
}
var traverseTree = function(bTreeNode, path) {
if(path.length === 0) {
return bTreeNode;
} else {
traverseTree(bTreeNode.childNodes[path.pop()], path);
}
}
establishPath(rootB, nodeA);
return traverseTree(rootB, travelPath);
}