Наверняка вам не раз было не удобно ориентироваться по DOM дереву с помощью методов ParentNode, PreviousSibling, FirstChild, LastChild, NextSibling из-за узлов - переводов строки то есть пустых строк.
Предлагаю вам модифицированы методы которые перемещаются только по узлам первого типа (XMl тэги)
previousSibling:
function prev(elem) {
do{
elem=elem.previousSibling;
} while ( elem && elem.nodeType !=1);
return elem;
}
nextSibling:
function next(elem) {
do{
elem=elem.nextSibling;
} while (elem && elem.nodeType !=1);
return elem;
}
firstchild:
function first(elem) {
elem=elem.firstChild;
return elem && elem.nodeType!=1 ? next (elem) :elem;
}
lastchild:
function last(elem) {
elem=elem.lastChild;
return elem && elem.nodeType!=1 ? prev (elem) :elem;
}
И наконец parentNode. Можно указать количество родительских узлов на которое нужно подняться во втором аргументе.
function parent(elem, num) {
num = num || 1;
for (var i=0; i < num; i++)
if ( elem != null ) elem = elem.parentNode;
return elem;
}
Например чтобы переместиться ко второму элементу body надо написать
next(first(document.body))