首先,父节点是相对于HTML文档的DOM树而言的。如下面的HTML:
<html><head></head>
<body>
<div id="id1">
<div id="id2">
</div>
</div>
</body>
</html>
在这个HTML的DOM树里面,id2这个div节点的父节点是id1这个div,页id1这个div的父节点是body。
一般来说,每个元素都有一个父节点,有0到多个子节点。
而Javascript中,修改一个DOM节点的外观,是通过修改这个DOM节点对象的属性来实现的。
例如:
var div2 = document.getElementById('id2')// 取id=id2这个节点
var div1 = div2.parentNode// div2的父节点,也就是id1这个div节点。
div1.style.border = '1px solid red'// 把div1的边框设置为1像素实线红边框
所以,应该是通过修改某对象本身的属性来实现这个对象外观的设置(并非通过修改子节点的属性,如xxx.parentNode.style.display = 'block'只是通过xxx.parentNode来引用到xxx父节点,最终修改的是父节点的属性,跟xxx没啥关系)
获取目标元素的方法很多,例如取子节点:div1.childNodes,(取div1的子节点列表)
关于HTML及Javascript的学习,网上有很多资料,可以看一下。例如:
W3School: http://www.w3school.com.cn/html/index.asp
//传入参数:需要遍历的对象,需要匹配的id,获取所有的父级节点的Id
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 } ]
先获取父节点: var parentEle=ele.parentNode
在获取父节点的兄弟节点:var parentEle1=parentEle.previousSbiling//上一个节点
某个子节点:var obj=parentEle1.firstChild//第一个子节点
jQuery也有相应的方法。