oj.js
function(attributes){
        var attr = _clone(attributes),
          events = _attributesProcessedForOJ(attr),
          k, v

        // Add attributes as object
        if (oj.isPlainObject(attr)){
          for (k in attr){
            v = attr[k]
            if (k === 'class')
              this.addClass(v)
            else if (v === true)
              // Boolean attributes have no value
              this.el.setAttributeNode(doc.createAttribute(k))
            else
              // Otherwise add it normally
              this.$el.attr(k, v)
          }
        }

        // Bind events
        if (events != null)
          _attributesBindEventsToDOM(events, this.el)
      }
function(attributes){
        var attr = _clone(attributes),
          events = _attributesProcessedForOJ(attr),
          k, v

        // Add attributes as object
        if (oj.isPlainObject(attr)){
          for (k in attr){
            v = attr[k]
            if (k === 'class')
              this.addClass(v)
            else if (v === true)
              // Boolean attributes have no value
              this.el.setAttributeNode(doc.createAttribute(k))
            else
              // Otherwise add it normally
              this.$el.attr(k, v)
          }
        }

        // Bind events
        if (events != null)
          _attributesBindEventsToDOM(events, this.el)
      }
addAttributes: Add attributes and apply the oj magic with jquery binding