Javascript DOM漫游功能不工作
我创建了一个简单的函数,它执行与getElementsByCassName()类似的任务。它应该遍历DOM中的每个节点,并将具有匹配类的节点推送到数组中。我尝试使用类似于Crockford的walk_the_DOM方法的东西,但是,我的方法不起作用。该函数在第一个DOM级别检索节点,但不深入。有人能告诉我出了什么问题吗?代码如下:Javascript DOM漫游功能不工作,javascript,Javascript,我创建了一个简单的函数,它执行与getElementsByCassName()类似的任务。它应该遍历DOM中的每个节点,并将具有匹配类的节点推送到数组中。我尝试使用类似于Crockford的walk_the_DOM方法的东西,但是,我的方法不起作用。该函数在第一个DOM级别检索节点,但不深入。有人能告诉我出了什么问题吗?代码如下: var getNodesWithClassname = function(classname) { var a = document.body; var 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)
}
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之前进行吗?如果这样做,则会跳过每个集合中的第一个孩子。你必须在这之前走。