【发布时间】:2019-03-27 16:16:45
【问题描述】:
我有一个很好的解决方案来从 HTML 节点树中获取 HTML 注释
var findComments = function(el) {
var arr = [];
for (var i = 0; i < el.childNodes.length; i++) {
var node = el.childNodes[i];
if (node.nodeType === 8) {
arr.push(node);
} else {
arr.push.apply(arr, findComments(node));
}
}
return arr;
};
var commentNodes = findComments(document);
// whatever you were going to do with the comment...
console.log(commentNodes[0].nodeValue);
来自this thread。 我所做的就是添加这个小循环来打印所有节点。
var arr = [];
var findComments = function(el) {
for (var i = 0; i < el.childNodes.length; i++) {
var node = el.childNodes[i];
if (node.nodeType === 8) {
arr.push(node);
} else {
arr.push.apply(arr, findComments(node));
}
}
return arr;
};
var commentNodes = findComments(document);
//I added this
for (var counter = arr.length; counter > 0; counter--) {
console.log(commentNodes[counter].nodeValue);
}
我不断收到此错误消息:
RangeError:为函数调用调试器提供的参数过多 评估代码:9:13
编辑:我在粘贴时有一个拼写错误,将代码从 i-- 更改为 counter--
【问题讨论】:
-
在您添加的
for循环中,您在测试表达式中使用变量counter,但它以i--结尾;应该是counter--。 -
另外,由于某种原因,您将
arr的声明从函数外部移到了内部;可能不是一个好主意。 edit 事实上,这几乎肯定是导致您的 Range Error 的原因。 -
@choz 这个想法可能是得到一个平面数组; push 数组会产生一个数组数组。
-
你将
arr初始化移到循环外,可能使用arr.length而不是commentNodes.length -
再次OP,问题是您将
arr的声明从函数内部移到了外部。
标签: javascript html xpath