JS根据子节点递归获取所有父节点的集合

JavaScript023

JS根据子节点递归获取所有父节点的集合,第1张

//传入参数:需要遍历的对象,需要匹配的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 } ]

js找一个子元素的父元素:

<!DOCTYPE html><html><head>

<meta charset="utf-8">

</title>    <script type="text/javascript">    function deleteElement(Obj)

{        Obj.parentNode.parentNode.removeChild(Obj.parentNode)    }    </script></head>

<body>     <ul class="list2" ><li ><img alt="" src="1.jpg" /><div>mingzi1</div>

<a onclick="deleteElement(this)">删除</a></li><li ><img alt="" src="2.jpg" />

<div>mingzi2</div><a onclick="deleteElement(this)">删除</a></li><li >

<img alt="" src="3.jpg" /><div>mingzi3</div><a onclick="deleteElement(this)">删除</a>

</li></ul></body></html>

拓展资料

删除一个父元素下面的所有子元素:

document.getElementById("ok").innerHTML = ""

删除其中的一个:

document.getElementById("ok").remove(document.getElementById("ok").children(i))

//删除id为"ok"下的第i-1个子元素

首先,父节点是相对于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