function findIdList(data2, id, children = 'children', level = 0) {
var arrRes = []
let obj = {
id: 0,
[children]: data2
}
let rev = (data, id, level) => {
if (!data || !data[children] || !data[children].length) {
return
}
for (var i = 0 i < data[children].length i++) {
let item = data[children][i]
if (item.id == id) {
// 将匹配到的结果保存到数组
arrRes.unshift({ level, activeId: item.id })
// 递归它的父级
rev(obj, data.id, 0)
break
} else if (item[children] && item[children].length > 0) {
//如果有子集,则把子集作为参数重新执行本方法
rev(item, id, level + 1)
}
}
}
rev(obj, id, level)
return arrRes
}
let list = [
{id: 1, children: [
{id: 11, children: [{id: 12}]}
]},
{id: 2, children: [{id:21, children: [{id: 31}]}]}
]
let b = findIdList(list, 21)
console.log(b) // [ { level: 0, activeId: 2 }, { level: 1, activeId: 21 } ]
<div><button onclick="dosell(this)">确定</button>
</div>
<script>
function dosell(item){
var parentNode=item.parentNode
alert(parentNode.tagName) //这里将会弹出DIV
}
</script>
如上,按钮上点击要加一个参数dosell(this)
<body><script>var a = Math.random()</script>
<div>
<script>
//这里的要点是需要获取到当前的script标签
//或者是这个script标签的父亲(div)
//1 直接获取到div
var all_div = document.getElementsByTagName('div')
var div = all_div[all_div.length - 1]
div.id = a
//这个是利用了html代码加载执行时的顺序从上到下
//而在这个script里代码执行的时候恰好解析到
//最后一个div就是我们想要的div 所以直接查找所有的div
//然后取最后一个div就是这个标签的父亲(div)
//2 获取当前执行的script标签,然后取它的父亲
function getCurrentScript(){
if(document.currentScript){
return document.currentScript
}
var scripts = document.getElementsByTagName('script')
return scripts[scripts.length - 1]
}
var script = getCurrentScript()
var div = script.parentNode
div.id = a
//这个是查找当前正在执行的脚本的标签
//新版浏览器会有支撑的属性 currentScript
//旧版本的话,就只好查找所有脚本,然后返回最后一个
</script>
</div>
</body>