Получить список ВСЕХ элементов DOM
Столкнулся со следующим: попытался получить список всех элементов дерева DOM, но столкнулся с тем, что получается список не всех элементов, а только лишь обычных тегов.
Как известно сейчас document.all не поддерживается и приходится использовать getElementsByTagName('*'). Но он возвращает только обычные тэги (с nodeType==1). То есть ни текстовые ноды, ни комментарии, ни другие ноды дерева DOM с другим nodeType в полученном списке недоступны... Вопрос: есть ли способ попроще получить полный список элементов дерева DOM? |
|
Я не понял при чем тут все это - там нет ответа на мой вопрос. То, что можно обойти всё дерево по firstChild + nextSibling и так понятно.
Есть ли простой способ найти все элементы дерева, включая комментарии и текстовые ноды? Какая-нибудь замена .all или getElementsByTagName ? |
А вам зачем?
|
А почему Вы спрашиваете?
|
тока так:
<html> <head> </head> <body> leftTextNode<div>text node</div>rightTextNode <script> (function(){ var els = document.getElementsByTagName('*'), all = []; for(var i = 0; els[ i ]; i++ ) { if ( els[ i ].previousSibling && els[ i ].previousSibling.nodeType !== 1 ) { all.push( els[ i ].previousSibling ); } all.push( els[i] ); if ( els[ i ].firstChild && els[ i ].firstChild.nodeType !== 1 && els[ i ].childNodes.length === 1 ) { all.push( els[ i ].firstChild ); } } alert(all.length); }()); </script> </body> </html> Так у них и сортировка правильная, можно конечно сделать и проще, но не будет гарантии верной сортировки. |
Цитата:
Так что тот еще вопрос, кто слоупочит. Кстати, почему ты заместо слоупок пишешь слупок? |
Цитата:
ниже один из вариантов <!DOCTYPE html> <html> <head> <script> function getAllEls() { var arrAll = []; function getEls(el) { var chNodes, i; arrAll.push(el); if (el.hasChildNodes()) { chNodes = el.childNodes; for (i = 0; i < chNodes.length; i++) { getEls(chNodes[i]); // вызываем рекурсивно } } } getEls(document); alert(arrAll.join('\n')); } </script> </head> <body onload="getAllEls()"> leftTextNode<div>text node</div>rightTextNode </body> </html> |
Часовой пояс GMT +3, время: 04:02. |