以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
89. 返回DOM tree中”右边“的元素

方法一:暴力枚举

首先需要定位到目标节点,然后顺序遍历它的父节点的所有子节点,找到目标节点的下一个节点即可。

时间复杂度:$O(n)$,其中 $n$ 是目标节点的兄弟节点数量。

空间复杂度:$O(1)$。

具体代码如下:

function getNextSiblingElement(target) {
  // 定位到目标节点
  let currentNode = target;

  // 遍历父节点的所有子节点,找到目标节点的下一个节点
  while (currentNode && !currentNode.nextElementSibling) {
    currentNode = currentNode.parentNode;
  }

  return currentNode ? currentNode.nextElementSibling : null;
}

方法二:通过父节点的 ChildNodes 获取

如果目标节点已经可以被获取,直接使用 nextElementSibling 获取它的下一个节点即可。如果不能直接被获取,寻找它的父节点,然后通过父节点的 childNodes 属性获取目标节点的下一个兄弟节点。需要注意的是,childNodes 返回的是一个动态的 NodeList,每次访问都会执行一次查询。

时间复杂度:$O(1)$。

空间复杂度:$O(1)$。

具体代码如下:

function getNextSiblingElement(target) {
  if (target.nextElementSibling) {
    return target.nextElementSibling;
  } else if (target.parentNode) {
    const childNodes = target.parentNode.childNodes;
    const index = Array.prototype.indexOf.call(childNodes, target);
    return childNodes[index + 1] || null;
  } else {
    return null;
  }
}