Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中查找具有特定深度的元素_Javascript - Fatal编程技术网

在JavaScript中查找具有特定深度的元素

在JavaScript中查找具有特定深度的元素,javascript,Javascript,我需要在纯JavaScript中编写一个函数,没有框架来获取所有特定的标记,但只能从父级下的第一级获取 例如:我需要在第一个上调用某个函数,并从它的第一级获取所有(文本1.2和文本2.1) 但是它返回这个div中的所有,而不仅仅是第一级。你有什么快速的方法来解决我的问题吗?或者我必须实现一个新的函数来检测节点的深度吗?你可以使用attribute.children来获取那些“li” 如果您想要一个通用函数,可以创建如下内容: var getElementsByDepth = function(e

我需要在纯JavaScript中编写一个函数,没有框架来获取所有特定的标记,但只能从父级下的第一级获取

例如:我需要在第一个
上调用某个函数,并从它的第一级获取所有
  • 文本1.2和
  • 文本2.1)


    但是它返回这个div中的所有
  • ,而不仅仅是第一级
  • 。你有什么快速的方法来解决我的问题吗?或者我必须实现一个新的函数来检测节点的深度吗?你可以使用attribute.children来获取那些“li”

    如果您想要一个通用函数,可以创建如下内容:

    var getElementsByDepth = function(el, tagname, depth) {
           var children = el.children;
           var res = new Array();
           for(var i=0; i<children.length; i++) {
              if (children[i].tagName == tagname) {
                 res.push(children[i]);
                 if (depth > 0)
                     res.concat(getElementsByDepth(children[i], tagname, depth-1));
              }
           }
           return res;
    }
    
    var getElementsByDepth=函数(el,标记名,深度){
    var children=el.children;
    var res=新数组();
    对于(变量i=0;i 0)
    res.concat(getElementsByDepth(子类[i],标记名,深度-1));
    }
    }
    返回res;
    }
    
    试试:

    这将返回页面上所有
    li
    元素中的第一个
    li
    元素。将末尾的零更改为不同的数字以获得不同的元素。您甚至可以为该值设置一个变量:

    var liNum = 0;
    var allLi = document.getElementById("sideNavigation").getElementsByTagName("li")[liNum];
    
    在函数中:
    函数getLi(深度){
    var specificLi=document.getElementById(“侧导航”).getElementsByTagName(“li”)[depth];
    回程时间;
    }
    var firstLi=getLi(0);
    console.log(firstLi)
    
    
    
    • 第一个列表标签
    • 第二个列表标签
    • 第三个列表标签

    看一看:是的,可能会有帮助。谢谢。
    document.queryselectoral('sideNavigation>ul>li')
    我认为您最好使用
    .childNodes
    而不是
    .childrends
    ,因为前者具有更好的浏览器支持。您只需进行简单的替换,无需更改任何代码。还应注意标记名参数必须全部为大写,如
    。标记名
    对于HTML总是以大写返回。(或者可以在代码中使用
    .toUpperCase()
    )。
    var firstDepthLi = document.getElementById("sideNavigation").children[0].children;
    
    var getElementsByDepth = function(el, tagname, depth) {
           var children = el.children;
           var res = new Array();
           for(var i=0; i<children.length; i++) {
              if (children[i].tagName == tagname) {
                 res.push(children[i]);
                 if (depth > 0)
                     res.concat(getElementsByDepth(children[i], tagname, depth-1));
              }
           }
           return res;
    }
    
    var allLi = document.getElementById("sideNavigation").getElementsByTagName("li")[0];
    
    var liNum = 0;
    var allLi = document.getElementById("sideNavigation").getElementsByTagName("li")[liNum];