accept null (for "no change") in setInnerHTML