I don't understand why you've written your classes with separate render() and getHTMLNode() functions.  

Why don't you just render automatically when the constructor is called?  Or the first time that getHTMLNode() is called?

Having a separate render() call feels like it is breaking the abstraction somehow.  But maybe I'm just missing something here.