[90] | 1 | // DOM element creator for jQuery and Prototype by Michael Geary |
---|
| 2 | // http://mg.to/topics/programming/javascript/jquery |
---|
| 3 | // Inspired by MochiKit.DOM by Bob Ippolito |
---|
| 4 | // Free beer and free speech. Enjoy! |
---|
| 5 | |
---|
| 6 | $.defineTag = function( tag ) { |
---|
| 7 | $[tag.toUpperCase()] = function() { |
---|
| 8 | return $._createNode( tag, arguments ); |
---|
| 9 | } |
---|
| 10 | }; |
---|
| 11 | |
---|
| 12 | (function() { |
---|
| 13 | var tags = [ |
---|
| 14 | 'a', 'br', 'button', 'canvas', 'div', 'fieldset', 'form', |
---|
| 15 | 'h1', 'h2', 'h3', 'hr', 'img', 'input', 'label', 'legend', |
---|
| 16 | 'li', 'ol', 'optgroup', 'option', 'p', 'pre', 'select', |
---|
| 17 | 'span', 'strong', 'table', 'tbody', 'td', 'textarea', |
---|
| 18 | 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul' ]; |
---|
| 19 | for( var i = tags.length - 1; i >= 0; i-- ) { |
---|
| 20 | $.defineTag( tags[i] ); |
---|
| 21 | } |
---|
| 22 | })(); |
---|
| 23 | |
---|
| 24 | $.NBSP = '\u00a0'; |
---|
| 25 | |
---|
| 26 | $._createNode = function( tag, args ) { |
---|
| 27 | var fix = { 'class':'className', 'Class':'className' }; |
---|
| 28 | var e; |
---|
| 29 | try { |
---|
| 30 | var attrs = args[0] || {}; |
---|
| 31 | e = document.createElement( tag ); |
---|
| 32 | for( var attr in attrs ) { |
---|
| 33 | var a = fix[attr] || attr; |
---|
| 34 | e[a] = attrs[attr]; |
---|
| 35 | } |
---|
| 36 | for( var i = 1; i < args.length; i++ ) { |
---|
| 37 | var arg = args[i]; |
---|
| 38 | if( arg == null ) continue; |
---|
| 39 | if( arg.constructor != Array ) append( arg ); |
---|
| 40 | else for( var j = 0; j < arg.length; j++ ) |
---|
| 41 | append( arg[j] ); |
---|
| 42 | } |
---|
| 43 | } |
---|
| 44 | catch( ex ) { |
---|
| 45 | alert( 'Cannot create <' + tag + '> element:\n' + |
---|
| 46 | args.toSource() + '\n' + args ); |
---|
| 47 | e = null; |
---|
| 48 | } |
---|
| 49 | |
---|
| 50 | function append( arg ) { |
---|
| 51 | if( arg == null ) return; |
---|
| 52 | var c = arg.constructor; |
---|
| 53 | switch( typeof arg ) { |
---|
| 54 | case 'number': arg = '' + arg; // fall through |
---|
| 55 | case 'string': arg = document.createTextNode( arg ); |
---|
| 56 | } |
---|
| 57 | e.appendChild( arg ); |
---|
| 58 | } |
---|
| 59 | |
---|
| 60 | return e; |
---|
| 61 | }; |
---|