在JavaScript中,递归查询节点通常是指在DOM(文档对象模型)中查找特定条件的所有元素。递归是一种算法,其中函数调用自身来解决问题的一部分,直到达到基本情况。
递归函数通常包含两个主要部分:
假设我们要查找页面上所有具有特定类名的元素,可以使用以下递归函数:
function findElementsByClassName(element, className) {
// 基本情况:如果元素为空,返回空数组
if (!element) {
return [];
}
// 初始化结果数组
let results = [];
// 检查当前元素是否具有指定的类名
if (element.classList && element.classList.contains(className)) {
results.push(element);
}
// 递归步骤:对当前元素的所有子元素调用函数
for (let i = 0; i < element.children.length; i++) {
results = results.concat(findElementsByClassName(element.children[i], className));
}
// 返回结果数组
return results;
}
// 使用示例
const allElements = document.body;
const classNameToFind = 'target-class';
const foundElements = findElementsByClassName(allElements, classNameToFind);
console.log(foundElements);
document.querySelectorAll
)来优化。function findElementsByClassNameIterative(root, className) {
let results = [];
let stack = [root];
while (stack.length > 0) {
let element = stack.pop();
if (element.classList && element.classList.contains(className)) {
results.push(element);
}
for (let i = element.children.length - 1; i >= 0; i--) {
stack.push(element.children[i]);
}
}
return results;
}
// 使用示例
const foundElementsIterative = findElementsByClassNameIterative(document.body, classNameToFind);
console.log(foundElementsIterative);
通过这种方式,我们可以避免递归调用栈溢出的问题,同时也能提高在大规模DOM树中查找元素的效率。
领取专属 10元无门槛券
手把手带您无忧上云