此代码旨在将所有子元素及其子元素放入一个数组中。但是,它返回一堆空数组。
function get_independent_elements_from(element) {
var independent_elements = [];
if (element.hasChildNodes()) {
var children = element.children;
for (let child of children) {
independent_elements = independent_elements.concat(get_independent_elements_from(child));
}
} else {
independent_elements.push(element);
}
return independent_elements;
}
答案 0 :(得分:0)
虽然您的新代码确实可以使用,但是您也可以让浏览器为您完成繁重的工作,而无需递归:
function getLeafNodes(el) {
let nl = el.querySelectorAll('*');
return [].filter.call(nl, x => !x.firstChild);
}
这是一个可能更有效的递归版本,它仅关闭单个数组并在内部处理递归:
function getLeadNodes(el) {
let r = [];
(function loop(x) {
if (x.children.length) {
[].forEach.call(x.children, loop);
} else {
r.push(x);
}
})(el);
return r;
}
答案 1 :(得分:0)
如果元素是这样的:
<p>hello world</p>
element.hasChildNodes()将返回ture,而element.children将返回空的HTMLCollection。
您可以更改if条件进行尝试。
if (element.children.length) { xxx }
谢谢您给我建议或意见。