Наверняка вам не раз было не удобно ориентироваться по 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))