我创建了一个简单的函数,它执行类似于 getElementsByClassName() 的任务。它应该遍历 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;
};
最佳答案
如果元素是带有子元素的元素,则需要递归:
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;
};
关于javascript - DOM 行走功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429031/