递归获取父元素。
https://github.com/shancw96/chrome_extensions/tree/master/webCrawer_hepler
/**
* 获取当前节点的所有父节点
* @param {HTMLDOM} node 节点
* @param {Array} resArr 结果数组
*/
const getAllParentNode = (node, resArr = []) => node.tagName === 'BODY' ? resArr : getAllParentNode(node.parentNode, [node, ...resArr])
/**
* 点击后获取 cheerio 爬虫格式 当前节点定位
* @param {HTML event} e
*/
const locateClickedDOM = e => {
e.preventDefault()
const nodeArr = getAllParentNode(e.target) //cur cur.par cur.par.par
// nodeArr -> String
//$('最外层的 parent clas id').children('次外层 parent + class id').....children('cur .class #id')
let res = nodeArr.reduce((prevString, curNode, index) => {
//className_str 获取
let className_str = ''
curNode.classList.forEach(className => {
className_str += `.${className}`
})
//拼装当前 node str
const curString = `${index === 0 ? '$' : '.children'}('${curNode.localName}${!!curNode.id ? '#' + curNode.id : ''}${className_str}')`
return prevString += curString
}, '')
const tag = e.target.alt ? e.target.alt : e.target.innerHTML
//输出
console.log('当前节点名称:' + tag + '\n' + res)
return
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.