从树形 html 结构中获取文本

getXpath = function(dom) {  
  dom = $(dom).get(0);  
  var path = "";  
  for (; dom && dom.nodeType == 1; dom = dom.parentNode) {  
    var index = 1;  
    for (var sib = dom.previousSibling; sib; sib = sib.previousSibling) {  
      if (sib.nodeType == 1 && sib.tagName == dom.tagName)  
        index++;  
      }  
    var xname =  dom.tagName.toLowerCase();  
    if (dom.id) {  
      xname += "[@id="" + dom.id + ""]";  
    } else {  
      if (index > 0)  
        xname += "[" + index + "]";  
    }  
    path = "/" + xname + path;  
  }  

  path = path.replace("html[1]/body[1]/","html/body/");  

        return path;  
};  

// ...

o = []

$(`.sitemapPageName`).each((index, item) => {
    const parents = $(item).parents(`ul`).parents(`.sitemapExpandableNode`).eq(0).find(`>div .sitemapPageName`)
    const xpath = getXpath(item)
    o.push({
        name: $(item).text(),
        parent: parents ? $(parents).text() : undefined,
        xpath,
        parentXpath: parents ? getXpath(parents[0]) : undefined,
        // s,
    })
})

o2 = o.map(item => {
    return {
        ...item,
        fullName: getName(item)
    }
})

function getName(item){
    let name = item.name
    if(item.parent) {
        const parentName = getName(o.find(item2 => item2.xpath === item.parentXpath))
        name = `${parentName} -> ${name}`
    }
    return name
}

console.log(o)
console.log(o2)

str = o2.map(item => item.fullName).join(`
`)

console.log(str)

/**
融资管理
融资管理 -> 融资订单列表 -> 已完成
融资管理 -> 融资订单列表 -> 待初审-被驳回
融资管理 -> 融资订单列表 -> 待终审-被驳回
融资管理 -> 用信明细
融资管理 -> 放款查询
结算管理
结算管理 -> 月息对账
结算管理 -> 月息对账 -> 待确认
结算管理 -> 月息对账 -> 待确认 -> 确认账单
财务管理
财务管理 -> 银行账户管理
财务管理 -> 银行账户管理 -> 提现
财务管理 -> 对账管理
财务管理 -> 对账管理 -> 放款对账
**/
原文地址:https://www.cnblogs.com/daysme/p/13531892.html