原生JS与jQuery获取节点的方法

JavaScript017

原生JS与jQuery获取节点的方法,第1张

  首先我们来介绍一下DOM中元素与节点间的关系:页面中所有内容都是节点[包括元素,属性,文本],所以节点是包括元素的。

  以下是节点的三个属性:

  若是火狐和chrome浏览器上述方法不存在兼容问题,而若是在IE8浏览器中后四组内容只能获取元素,无法获取文本或属性。即原获取节点方法-->取元素;原获取元素方法-->undefined。

  jQuery中是以方法的形式进行调用,同时都是用来获取元素:

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

通过鼠标选中事件获取点击的物体e,查找此物体e.parent属性,我是scene.add()添加的,判定e.parent !== scene,不相等(e = e.parent)就接着向上找,直到找到相等的时候此时的e就是整个外部模型。 获取外部模型代码 letself=thisfunctionget_parent(e){if(e.parent&&e.parent!==self.scene){get_parent(e.parent)}else{self.selectMesh=e}}get_parent(intersect.object)console.log(this.selectMesh)获取外部模型所有子节点方法 threejs本身封装的traverse方法: this.selectMesh.traverse(function(e){if(e.material)