<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div>
<div class="idWarp">
<div>
<span></span>
</div>
<div>
<div>
<span></span>
<span>
<i id="targetId"></i>
</span>
</div>
</div>
</div>
</div>
<script>
// 这是一个递归的方法
var idWarp = document.getElementsByClassName('idWarp')[0]
console.log(document.getElementsByClassName('idWarp'))
// function getByElementId(el, id) {
// if(el.id === id) return el
// let children = el.children && el.children
// for(let item of children) {
// let target = getByElementId(item, id)
// if(target) return target
// }
// return null
// }
// console.log(getByElementId(idWarp, 'targetId'))
// 接下来是一个非递归的方法
function getByElementId(el, id, rootDom) {
while(el) {
if(el.id === id) return el
el = getElement(el, rootDom)
}
return null
}
function getElement(el, rootDom) {
// debugger
if(el.children.length) return el.children[0]
if(el.nextElementSibling) return el.nextElementSibling
while(el.parentNode) {
if(el.parentNode.nextElementSibling) return el.parentNode.nextElementSibling
el = el.parentNode
if(el === rootDom) return null
}
}
console.log(getByElementId(idWarp, 'targetId', idWarp))
</script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。