<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <div class="a"> 一级 <div class="b"> 二级 <div class="c"> 三级 <div id="start" class=""> 目标 </div> </div> </div> </div> </body> <script type="text/javascript"> let startTag = document.querySelector('#start') /** * getParentTag - 获取传入标签的全部父级标签 * * @param { HTMLElement } startTag 初始dom节点 * @param {Array} parentTagList 初始dom节点的全部父级节点 * @return {type} 递归/初始dom节点的全部父级节点 */ function getParentTag(startTag, parentTagList = []) { // 传入标签是不是DOM对象 if (!(startTag instanceof HTMLElement)) return console.error('receive only HTMLElement'); // 父级标签是不是body,是着中止返回集合,反之继续 if ('BODY' !== startTag.parentElement.nodeName) { // 放入集合 parentTagList.push(startTag.parentElement) // 再上一层寻找 return getParentTag(startTag.parentElement, parentTagList) } // 返回集合,结束 else return parentTagList; } console.log(getParentTag(startTag)); </script> </html>