1

<!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>
getElementById.jpeg


yellowDog
28 声望3 粉丝