demo/modernizr.js
/**
   * returns a shived element for the given nodeName and document
   * @memberOf html5
   * @param {String} nodeName name of the element
   * @param {Document} ownerDocument The context document.
   * @returns {Object} The shived element.
   */
returns a shived element for the given nodeName and document
@memberOf html5
@param {String} nodeName name of the element
@param {Document} ownerDocument The context document.
@returns {Object} The shived element.
returns a shived element for the given nodeName and document @memberOf html5 @param { String } nodeName name of the element @param { Document } ownerDocument The context document . @returns { Object } The shived element .
function createElement(nodeName, ownerDocument, data){
    if (!ownerDocument) {
        ownerDocument = document;
    }
    if(supportsUnknownElements){
        return ownerDocument.createElement(nodeName);
    }
    if (!data) {
        data = getExpandoData(ownerDocument);
    }
    var node;
    if (data.cache[nodeName]) {
        node = data.cache[nodeName].cloneNode();
    } else if (saveClones.test(nodeName)) {
        node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
    } else {
        node = data.createElem(nodeName);
    }
    return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node;
  }
function createElement ( nodeName , ownerDocument , data ) { if ( ! ownerDocument ) { ownerDocument = document ; } if ( supportsUnknownElements ) { return ownerDocument . createElement ( nodeName ) ; } if ( ! data ) { data = getExpandoData ( ownerDocument ) ; } var node ; if ( data . cache [ nodeName ] ) { node = data . cache [ nodeName ] . cloneNode ( ) ; } else if ( saveClones . test ( nodeName ) ) { node = ( data . cache [ nodeName ] = data . createElem ( nodeName ) ) . cloneNode ( ) ; } else { node = data . createElem ( nodeName ) ; } return node . canHaveChildren && ! reSkip . test ( nodeName ) ? data . frag . appendChild ( node ) : node ; }
returns a shived element for the given nodeName and document
 @memberOf html5
 @param {String} nodeName name of the element
 @param {Document} ownerDocument The context document.
returns a shived element for the given nodeName and document @memberOf html5 @param { String } nodeName name of the element @param { Document } ownerDocument The context document .
// Avoid adding some elements to fragments in IE < 9 because // * Attributes like `name` or `type` cannot be set/changed once an element //   is inserted into a document/fragment // * Link elements with `src` attributes that are inaccessible, as with //   a 403 response, will cause the tab/window to crash // * Script elements appended to fragments will execute when their `src` //   or `text` property is set