Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Обход всех элементов DOM
Обход всех элементов от текущего дальше по дереву с заходом во все узлы.
Приведенный здесь скрипт ищет ссылку, совпадающую с параметром командной строки после #. Если нашел, то обходит все узлы от неё и далее и, если у узла есть свойство style, то меняет его.
Закомментирован блок кода выхода на уровень выше и остановка обхода, если встретится два <br> подряд.
Исходный код этого примера:
<script>
if(window.location.hash.length>1){
l=window.location.hash.substring(1);
for(i=0; i<document.links.length; i++)
{link=document.links[i];
if(link.href.indexOf(l)>=0){
while(link){
l=link;
link=ll(link);
//если встречаются два подряд перевода строк - обход прекратить
//if(link.nodeName=='BR'&&link.nextSibling.nodeName=='BR')break;
/*if(!link){ // выход на уровень выше
link=l.parentNode;
for (var j=0; j < link.childNodes.length; j++)
if(link.childNodes[j].firstChild==l){
if(j+1 < link.childNodes.length) link=link.childNodes[j+1];
else link=null;
break;}
}*/
}
break;
}
}
}
// вспомогательная рекурсивная функция обхода элементов DOM-дерева
function ll(link){
if(link.style){
link.style.backgroundColor='#ffcccc';
link.style.fontWeight='bold';
}
for (var i=0; i < link.childNodes.length; i++){
// углубляюсь в дерево. Обхожу все элементы узла
var l=link.childNodes[i].firstChild;
while(l){l=ll(l);
//if(link.nodeName=='BR'&&link.nextSibling.nodeName=='BR')return;
}
}
// возвращаю ссылку на следующий элемент на текущем уровне
return link.nextSibling;
}
</script>
Этот код помещает все элементы DOM в массив:
var list = document.body.childNodes,
length = list.length, array = [], i;
for(i = 0; i < length; array.push(list[i++]));
alert(typeof array.push);
.
Прокомментировать/Отблагодарить