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);
テスト済みhere。
再帰的な解決策。これは、機能スタイルプログラミングを使用して、よりエレガントに行うことができます。これはクロスブラウザ.reduce
の実装のためにunderscore.jsに依存しています。新しいブラウザをターゲットにしている場合は、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);
これをテスト/デバッグするには、しばらくお待ちください。
IはjQueryオプション
var array = $(root).find("*").toArray()
確認ビンゴ、と感謝 – Nilesh
VARルート= $( "#ルート")[0]; var nodeList = []; 関数appendChildren(ノード、アレイ){ IF(node.hasChildNodes()){ ため(VAR i = 0; iはnode.children.lengthを<; Iは++){ (node.children [I] .hasChildNodes場合()){ array.push(node.children [i]); } appendChildren(node.children [i]、array); } } } appendChildren(root、nodeList); – Nilesh
チャームのように働き、時間を節約しました。 –