function ElementNode(parent, tagname, attributes) {
  Node.call(this, 'element', parent);

  // Since this is an element there will minimum one tag
  this.tags = (tagname === 'br' || tagname === 'wbr') ? 0 : 1;

  // Element nodes also has a tagname and an attribute collection
  this.tagname = tagname;
  this.attr = attributes;
  this.classes = attributes.hasOwnProperty('class') ?
    attributes['class'].trim().split(WHITE_SPACE) : [];

  // Add node to the classlist
  this.root.classlist.addNode(this);

  this._blockySelfCache = domHelpers.BLOCK_ELEMENTS.hasOwnProperty(tagname);
  this._countTagnames = {};
}
function ElementNode(parent, tagname, attributes) {
  Node.call(this, 'element', parent);

  // Since this is an element there will minimum one tag
  this.tags = (tagname === 'br' || tagname === 'wbr') ? 0 : 1;

  // Element nodes also has a tagname and an attribute collection
  this.tagname = tagname;
  this.attr = attributes;
  this.classes = attributes.hasOwnProperty('class') ?
    attributes['class'].trim().split(WHITE_SPACE) : [];

  // Add node to the classlist
  this.root.classlist.addNode(this);

  this._blockySelfCache = domHelpers.BLOCK_ELEMENTS.hasOwnProperty(tagname);
  this._countTagnames = {};
}
function ElementNode ( parent , tagname , attributes ) { Node . call ( this , 'element' , parent ) ; // Since this is an element there will minimum one tag this . tags = ( tagname === 'br' || tagname === 'wbr' ) ? 0 : 1 ; // Element nodes also has a tagname and an attribute collection this . tagname = tagname ; this . attr = attributes ; this . classes = attributes . hasOwnProperty ( 'class' ) ? attributes [ 'class' ] . trim ( ) . split ( WHITE_SPACE ) : [ ] ; // Add node to the classlist this . root . classlist . addNode ( this ) ; this . _blockySelfCache = domHelpers . BLOCK_ELEMENTS . hasOwnProperty ( tagname ) ; this . _countTagnames = { } ; }
ElementNode has a parent, tagname and attributes
ElementNode has a parent tagname and attributes