Expandir/contraer nodos de un menú

Cómo

Accediendo a través de la jerarquía DOM hasta la propiedad display del objeto Style. Para ello utilizaremos la siguiente función:

Fuente:
function changeMenuState(e) {
    element = e.parentNode.getElementsByTagName('ul');
    element[0].style.display = element[0].style.display == 'none' ? 'block' : 'none';
}

que sólo será válida si el menú está construido de una manera similar a esta:

Fuente:
<ul>
    <li><span onclick="javascript:changeMenuState(this)">Elemento 1</span>
    <ul>
        <li><span onclick="javascript:changeMenuState(this)">Elemento 1.1</span></li>
        <ul>
            <li>Elemento 1.1.2</li>
        </ul>
    </ul>
    </li>
    <li><span onclick="javascript:changeMenuState(this)">Elemento 2</span>
    </li>
</ul>