updated to remove `.child` and add `firstChild/lastChild` support