Во-первых, я бы сделал так:
https://jsfiddle.net/eL1npjk6/
Во-вторых... nextSibling возвращает следующиЙ элемент, а не набор элементов.
В-третьих...
Браузеры, основанные на Gecko, вставляют текстовые узлы в документ для представления пробелов в разметке. Поэтому узел, полученный, например, при использовании Node.firstChild или Node.previousSibling может относиться к пробелу, а не к тому элементу, который автор хотел получить.
Потому и не работает.