Получить список ВСЕХ элементов 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, время: 03:37. |