Javascript DOM漫游功能不工作

Javascript DOM漫游功能不工作,javascript,Javascript,我创建了一个简单的函数,它执行与getElementsByCassName()类似的任务。它应该遍历DOM中的每个节点,并将具有匹配类的节点推送到数组中。我尝试使用类似于Crockford的walk_the_DOM方法的东西,但是,我的方法不起作用。该函数在第一个DOM级别检索节点,但不深入。有人能告诉我出了什么问题吗?代码如下: var getNodesWithClassname = function(classname) { var a = document.body; var ar

我创建了一个简单的函数,它执行与getElementsByCassName()类似的任务。它应该遍历DOM中的每个节点,并将具有匹配类的节点推送到数组中。我尝试使用类似于Crockford的walk_the_DOM方法的东西,但是,我的方法不起作用。该函数在第一个DOM级别检索节点,但不深入。有人能告诉我出了什么问题吗?代码如下:

var getNodesWithClassname = function(classname) {
  var a = document.body;
  var ar = [];
  var getNodes = function(obj, classname) {
    if (obj.hasChildNodes()) {
      var child = obj.firstElementChild;
      while (child) {
        if (child.className === classname) {
          ar.push(child)
        }
        child = child.nextElementSibling;
      }
    }
  }
  getNodes(a, classname);
  return ar;
};

如果没有递归,则应该在函数
getNodes
内部调用
getNodes()。如果没有递归,它就无法深入到树中


需要有一个
getNodes(child,classname)调用。

如果没有递归,则应该在函数
getNodes
内部调用
getNodes()。如果没有递归,它就无法深入到树中


需要有一个
getNodes(child,classname)调用。

如果元素是具有子元素的元素,则需要递归:

var getNodesWithClassname = function(classname) {
  var a = document.body;
  var ar = [];
  var getNodes = function(obj, classname) {
    if (obj.hasChildNodes()) {
      var child = obj.firstElementChild;
      while (child) {
        if (child.className === classname) {
          ar.push(child)
        }
        if (child.nodeType === 1 && child.childElementCount > 0) {
          getNodes(child, classname);
        }
        child = child.nextElementSibling;
      }
    }
  }
  getNodes(a, classname);
  return ar;
};

如果元素是具有子元素的元素,则需要递归:

var getNodesWithClassname = function(classname) {
  var a = document.body;
  var ar = [];
  var getNodes = function(obj, classname) {
    if (obj.hasChildNodes()) {
      var child = obj.firstElementChild;
      while (child) {
        if (child.className === classname) {
          ar.push(child)
        }
        if (child.nodeType === 1 && child.childElementCount > 0) {
          getNodes(child, classname);
        }
        child = child.nextElementSibling;
      }
    }
  }
  getNodes(a, classname);
  return ar;
};

一个更简单的方法是只提取所有元素并过滤掉哪些元素具有类名。不需要递归,只需一次运行循环

var getNodesWithClassname=函数(classname){
var nodes=document.getElementsByTagName(“*”);
var nodesLength=nodes.length;
var结果=[];
对于(变量i=0;i
一种更简单的方法是只提取所有元素并过滤掉哪些元素具有类名。不需要递归,只需一次运行循环

var getNodesWithClassname=函数(classname){
var nodes=document.getElementsByTagName(“*”);
var nodesLength=nodes.length;
var结果=[];
对于(变量i=0;i
它是如何不起作用的?任何地方都没有递归,这在很大程度上解释了为什么代码只遍历一个级别。它是如何不起作用的?任何地方都没有递归,这在很大程度上解释了为什么代码只遍历一个级别。在child=child.nextElementSibling之后?如果这样做,您将跳过每个集合中的第一个子级。需要在.After-child=child.nextElementSibling之前进行吗?如果这样做,则会跳过每个集合中的第一个孩子。你必须在这之前走。