var root = $("#root")[0];
var nodeList = [];
function appendChildren(node, array) {
if (node.hasChildNodes()) {
for (var i = 0; i < node.children.length; i++) {
if (node.children[i].hasChildNodes()) {
appendChildren(node.children[i], array);
array.push(node.children[i]);
}
}
}
}
appendChildren(root, nodeList);
Проверено здесь .
Рекурсивное решение. Это можно сделать более элегантно, используя функциональный стиль программирования. Этот вариант основан на underscore.js для кросс-браузерной реализации .reduce
. Вы можете положиться на array.reduce, если ориентируетесь на новые браузеры.
function nodeToChildren(node) {
if (node.hasChildren()) {
_.reduce(node.children, function (memo, val) {
return memo.concat(nodeToChildren(val));
}, [].concat(node));
} else {
return node;
}
}
var array = nodeToChildren(root);
Дайте мне несколько минут, чтобы проверить / отладить это.
Я забыл опцию jQuery
var array = $(root).find("*").toArray()